C++

From Wikipedia, the free encyclopedia

C++
Remove ads

C++ është një gjuhë programuese e nivelit të lartë dhe me përdorim të përgjithshëm, e krijuar nga shkencëtari danez i kompjuterëve Bjarne Stroustrup. Ajo u paraqit për herë të parë në vitin 1985 si një zgjerim i gjuhës programuese C, duke shtuar veçori të programimit të orientuar nga objektet (OOP). Me kalimin e kohës, C++ është zhvilluar ndjeshëm duke shtuar edhe më shumë funksione dhe veçori.

Fakte të shpejta Paradigma, Family ...

Që prej standardizimit të vitit 1997/C++98, gjuha ka përfshirë veçori funksionale, lehtësira për manipulimin e memories me nivel të ulët, si dhe aftësi për të punuar me sisteme si mikrokompjuterët apo për të krijuar sisteme operative në Linux dhe Windows. C++ përdoret edhe për programim gjenerik përmes përdorimit të shablloneve (templates).

Zakonisht, C++ implementohet si një gjuhë e kompiluar, dhe shumë kompani ofrojnë implementime të kësaj gjuhe, si: Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle dhe IBM.

C++ u projektua duke pasur parasysh programimin e sistemeve dhe softuerët e integruar me burime të kufizuara dhe sistemet e mëdha, duke pasur parasysh performancën, efikasitetin dhe fleksibilitetin e përdorimit si pikat kryesore të dizajnit të tij. [14] C++ është gjetur i dobishëm edhe në shumë kontekste të tjera, ku pikat kryesore të forta janë infrastruktura e softuerëve dhe aplikacionet me burime të kufizuara, [14] duke përfshirë aplikacionet për desktop, lojërat video, serverët (p.sh., tregtia elektronike, kërkimi në internet ose bazat e të dhënave ) dhe aplikacionet kritike për performancën (p.sh., ndërprerësit telefonikë ose sondat hapësinore ). [15]

C++ është standardizuar nga Organizata Ndërkombëtare për Standardizim (ISO), me versionin më të fundit të standardit të ratifikuar dhe publikuar nga ISO në tetor 2024 si ISO/IEC 14882:2024 (i njohur jozyrtarisht si C++23 ). [16] Gjuha e programimit C++ u standardizua fillimisht në vitin 1998 si ISO/IEC 14882:1998, e cila më pas u ndryshua nga standardet C++03, C++11, C++14, C++17 dhe C++20 . Standardi aktual C++23 i zëvendëson këto me veçori të reja dhe një bibliotekë standardesh të zgjeruar. Përpara standardizimit fillestar në vitin 1998, C++ u zhvillua nga Stroustrup në Bell Labs që nga viti 1979 si një zgjerim i gjuhës C; ai donte një gjuhë efikase dhe fleksibile të ngjashme me C që gjithashtu ofronte veçori të nivelit të lartë për organizimin e programit. [17] Që nga viti 2012, C++ ka qenë në një orar publikimi tre-vjeçar [18] me C++26 si standardin e ardhshëm të planifikuar. [19]

Remove ads

Historia

Thumb
Bjarne Stroustrup, krijuesi i C++, në zyrën e tij të AT&T në New Jersey, rr.2000

Në vitin 1979, Bjarne Stroustrup, një shkencëtar danez i kompjuterave, filloi punën në " C me klasa ", paraardhësi i C++. [20] Motivimi për krijimin e një gjuhe të re lindi nga përvoja e Stroustrup në programim për tezën e tij të doktoraturës. Stroustrup zbuloi se Simula kishte karakteristika që ishin shumë të dobishme për zhvillimin e softuerëve të mëdhenj, por gjuha ishte shumë e ngadaltë për përdorim praktik, ndërsa BCPL ishte e shpejtë, por shumë e ulët për të qenë e përshtatshme për zhvillimin e softuerëve të mëdhenj. Kur Stroustrup filloi të punonte në AT&T Bell Labs, ai pati problemin e analizimit të bërthamës UNIX në lidhje me informatikën e shpërndarë . Duke kujtuar përvojën e tij të doktoraturës, Stroustrup vendosi të përmirësonte gjuhën C me karakteristika të ngjashme me Simula. [21] C u zgjodh sepse ishte për qëllime të përgjithshme, e shpejtë, e lëvizshme dhe e përdorur gjerësisht. Përveç ndikimeve të C dhe Simula, gjuhë të tjera ndikuan në këtë gjuhë të re, duke përfshirë ALGOL 68, Ada, CLU dhe ML . [ nevojitet citim ]

Fillimisht, "C me Klasa" e Stroustrup shtoi veçori në kompilatorin C, Cpre, duke përfshirë klasat, klasat e derivuara, shtypjen e fortë, rreshtimin dhe argumentet e parazgjedhura . [22]

Thumb
Një kuiz mbi veçoritë e C++11 që jepet në Paris në vitin 2015

Në vitin 1982 Stroustrup filloi të zhvillonte një pasardhës të C me Klasat, të cilën e quajti "C++" ( ++ është operatori i rritjes në C) pasi kaloi nëpër disa emra të tjerë. U shtuan veçori të reja, duke përfshirë funksione virtuale, mbingarkesë të funksioneve dhe operatorëve, referenca, konstante, alokim memorieje të sigurt për llojin (e re/fshirë), kontroll të përmirësuar të llojit dhe komente me një rresht të vetëm në stilin BCPL me dy vija të pjerrëta përpara ( // ). Për më tepër, Stroustrup zhvilloi një përpilues të ri, të pavarur për C++, Cfront .

Në vitin 1984 Stroustrup zbatoi bibliotekën e parë të hyrjeve dhe daljeve të rrjedhës. Ideja e ofrimit të një operatori daljeje në vend të një funksioni të emërtuar daljeje u sugjerua nga " Doug McIlroy " i cili më parë kishte sugjeruar tubacionet Unix .

Në vitin 1985, u publikua botimi i parë i Gjuhës së Programimit C++, e cila u bë referenca përfundimtare për gjuhën, pasi ende nuk kishte një standard zyrtar. [23] Implementimi i parë komercial i C++ u publikua në tetor të të njëjtit vit. [20]

Në vitin 1989, u publikua C++ 2.0, i ndjekur nga botimi i dytë i përditësuar i Gjuhës së Programimit C++ në vitin 1991. [24] Karakteristikat e reja në versionin 2.0 përfshinin trashëgimi të shumëfishtë, klasa abstrakte, funksione statike të anëtarëve, funksione konst dhe anëtarë të mbrojtur. Në vitin 1990, u botua Manuali i Referencës së Annotuar të C++ . Kjo vepër u bë baza për standardin e ardhshëm. Shtesat e mëvonshme të karakteristikave përfshinin shabllone, përjashtime, hapësira emrash, forma të reja dhe një lloj boolean .

Në vitin 1998, u publikua C++98, duke standardizuar gjuhën, dhe një përditësim i vogël ( C++03 ) u publikua në vitin 2003.

Pas C++98, C++ evoluoi relativisht ngadalë derisa, në vitin 2011, u publikua standardi C++11, duke shtuar shumë veçori të reja, duke zgjeruar më tej bibliotekën standarde dhe duke ofruar më shumë lehtësira për programuesit C++. Pas një përditësimi të vogël të C++14 të publikuar në dhjetor 2014, në C++17 u prezantuan shtesa të ndryshme të reja. [25] Pasi u finalizua në shkurt 2020, [26] një draft i standardit C++20 u miratua më 4 shtator 2020 dhe u publikua zyrtarisht më 15 dhjetor 2020. [27] [28]

Më 3 janar 2018, Stroustrup u shpall fituesi i Çmimit Charles Stark Draper për Inxhinieri për vitin 2018, "për konceptualizimin dhe zhvillimin e gjuhës së programimit C++". [29]

Në dhjetor 2022, C++ u rendit i treti në indeksin TIOBE, duke tejkaluar Java-n për herë të parë në historinë e indeksit. Që prej nëntorit 2024 , gjuha renditet e dyta pas Python, me Java që është në të tretën. [30]

Në mars të vitit 2025, Stroustrup bëri një thirrje për komunitetin e gjuhës që ta mbronte atë. Meqenëse gjuha lejon menaxhimin manual të memories, gabimet që përfaqësojnë rreziqe sigurie, siç është tejmbushja e memorjes së përkohshme, mund të shfaqen në programe kur keqpërdoren pa dashje nga programuesi. [31]

Etimologjia

Sipas Stroustrup, "emri tregon natyrën evolucionare të ndryshimeve nga C". [32] Ky emër i atribuohet Rick Mascitti-t (mesi i vitit 1983) [22] dhe u përdor për herë të parë në dhjetor 1983. Kur Mascitti u pyet në mënyrë joformale në vitin 1992 në lidhje me emërtimin, ai tregoi se ishte dhënë me një frymë ironike . Emri vjen nga operatori ++ i C (i cili rrit vlerën e një variabli ) dhe një konventë e zakonshme emërtimi e përdorimit të "+" për të treguar një program kompjuterik të përmirësuar.

Gjatë periudhës së zhvillimit të C++, gjuha ishte referuar si "C e re" dhe "C me klasa" [22] [33] përpara se të merrte emrin e saj përfundimtar.

Filozofi

Gjatë gjithë ekzistencës së C++, zhvillimi dhe evolucioni i saj është udhëhequr nga një sërë parimesh: [21]

  • Duhet të drejtohet nga probleme reale dhe veçoritë e tij duhet të jenë menjëherë të dobishme në programet e botës reale.
  • Çdo veçori duhet të jetë e zbatueshme (me një mënyrë mjaft të qartë për ta bërë këtë).
  • Programuesit duhet të jenë të lirë të zgjedhin stilin e tyre të programimit, dhe ky stil duhet të mbështetet plotësisht nga C++.
  • Lejimi i një veçorie të dobishme është më i rëndësishëm sesa parandalimi i çdo keqpërdorimi të mundshëm të C++.
  • Duhet të ofrojë lehtësira për organizimin e programeve në pjesë të ndara dhe të përcaktuara mirë, si dhe të ofrojë lehtësira për kombinimin e pjesëve të zhvilluara veçmas.
  • Pa shkelje implicite të sistemit të tipeve (por lejon shkelje të qarta; domethënë, ato të kërkuara në mënyrë të qartë nga programuesi).
  • Llojet e krijuara nga përdoruesi duhet të kenë të njëjtën mbështetje dhe performancë si llojet e integruara.
  • Karakteristikat e papërdorura nuk duhet të ndikojnë negativisht në skedarët e ekzekutueshëm të krijuar (p.sh. në performancë më të ulët).
  • Nuk duhet të ketë asnjë gjuhë nën C++ (përveç gjuhës së asamblesë ).
  • C++ duhet të funksionojë së bashku me gjuhët e tjera ekzistuese të programimit, në vend që të nxisë mjedisin e vet të programimit, të ndarë dhe të papajtueshëm.
  • Nëse qëllimi i programuesit është i panjohur, lejojeni programuesin ta specifikojë atë duke ofruar kontroll manual.

Standardizimi

Stampa:C++ programming language

Më shumë informacion Viti, ISO/IEC Standard ...

C++ është standardizuar nga një grup pune ISO i njohur si JTC1/SC22/WG21 . Grupi i punës mban takime tre-javore çdo vit. [40] Deri më tani, ai ka publikuar shtatë rishikime të standardit C++ dhe aktualisht po punon në rishikimin tjetër, C++26 .

Thumb
Skena gjatë takimit të komitetit të standardeve C++ në Stokholm në vitin 1996

Në vitin 1998, grupi i punës ISO standardizoi C++ për herë të parë si ISO/IEC 14882:1998, i cili njihet jozyrtarisht si C++98 . Në vitin 2003, ai publikoi një version të ri të standardit C++ të quajtur ISO/IEC 14882:2003, i cili rregulloi problemet e identifikuara në C++98.

Rishikimi i radhës i madh i standardit u quajt jozyrtarisht "C++0x", por nuk u publikua deri në vitin 2011. [41] C++11 (14882:2011) përfshinte shumë shtesa si në gjuhën bazë ashtu edhe në bibliotekën standarde. [36]

Në vitin 2014, C++14 (i njohur edhe si C++1y) u publikua si një zgjerim i vogël i C++11, duke paraqitur kryesisht rregullime të gabimeve dhe përmirësime të vogla. [42] Procedurat e votimit të Standardit Ndërkombëtar të Draftit përfunduan në mesin e gushtit 2014. [43]

Pas C++14, një rishikim i madh i C++17, i njohur jozërisht si C++1z, u përfundua nga komiteti ISO C++ në mesin e korrikut 2017 dhe u miratua dhe u botua në dhjetor 2017. [44]

Si pjesë e procesit të standardizimit, ISO publikon gjithashtu raporte dhe specifikime teknike :

  • ISO/IEC TR 18015:2006 [45] mbi përdorimin e C++ në sistemet e ngulitura dhe mbi implikimet në performancë të gjuhës C++ dhe veçorive të bibliotekës,
  • ISO/IEC TR 19768:2007 [46] (i njohur edhe si Raporti Teknik C++ 1 ) mbi zgjerimet e bibliotekave kryesisht të integruara në C++11 ,
  • ISO/IEC TR 29124:2010 [47] mbi funksionet e veçanta matematikore, të integruara në C++17 ,
  • ISO/IEC TR 24733:2011 [48] mbi aritmetikën dhjetore me pikë lundruese ,
  • ISO/IEC TS 18822:2015 [49] në bibliotekën standarde të sistemit të skedarëve, të integruar në C++17 ,
  • ISO/IEC TS 19570:2015 [50] mbi versionet paralele të algoritmeve standarde të bibliotekës, të integruara në C++17 ,
  • ISO/IEC TS 19841:2015 [51] mbi memorien transaksionale të softuerit,
  • ISO/IEC TS 19568:2015 [52] mbi një grup të ri zgjerimesh të bibliotekës, disa prej të cilave janë integruar tashmë në C++17 ,
  • ISO/IEC TS 19217:2015 [53] mbi konceptet C++, të integruara në C++20 ,
  • ISO/IEC TS 19571:2016 [54] mbi zgjerimet e bibliotekës për konkurencë, disa prej të cilave janë tashmë të integruara në C++20 ,
  • ISO/IEC TS 19568:2017 [55] mbi një grup të ri zgjerimesh të bibliotekave me qëllim të përgjithshëm,
  • ISO/IEC TS 21425:2017 [56] mbi zgjerimet e bibliotekës për diapazone, të integruara në C++20 ,
  • ISO/IEC TS 22277:2017 [57] mbi korutinat, të integruara në C++20 ,
  • ISO/IEC TS 19216:2018 [58] mbi bibliotekën e rrjetëzimit,
  • ISO/IEC TS 21544:2018 [59] mbi modulet, të integruara në C++20 ,
  • ISO/IEC TS 19570:2018 [60] mbi një grup të ri zgjerimesh të bibliotekës për paralelizëm
  • ISO/IEC TS 23619:2021 [61] mbi zgjerimet e reja për programimin reflektues (reflektimin),
  • ISO/IEC TS 9922:2024 [62] mbi një grup të ri zgjerimesh të njëkohshme, dhe
  • ISO/IEC TS 19568:2024 [63] në një tjetër grup të ri zgjerimesh të bibliotekës.

Më shumë specifikime teknike janë në zhvillim e sipër dhe në pritje të miratimit.

Remove ads

Gjuha

Stampa:ISO standardsGjuha C++ ka dy komponentë kryesorë: një hartëzim të drejtpërdrejtë të veçorive të harduerit të ofruara kryesisht nga nëngrupi C, dhe abstraksione zero-overhead bazuar në këto harta. Stroustrup e përshkruan C++ si "një gjuhë programimi abstraksioni të lehtë [të projektuar] për ndërtimin dhe përdorimin e abstraksioneve efikase dhe elegante"; [14] dhe "ofrimi i aksesit në harduer dhe abstraksionit është baza e C++. Bërja e saj në mënyrë efikase është ajo që e dallon atë nga gjuhët e tjera." [64]

C++ trashëgon pjesën më të madhe të sintaksës së C. Një program hello world që përputhet me standardin C është gjithashtu një program hello world i vlefshëm C++. Më poshtë është përshtatur nga versioni i programit Hello world i Bjarne Stroustrup që përdor strukturën e rrjedhës së Bibliotekës Standarde C++ për të shkruar një mesazh në daljen standarde : [65] [66] [b]

#include <iostream>

int main() {
  std::cout << "Përshëndetje, botë!\n";
}

Që nga C++23, me futjen e Funksionet dhe moduli &nbsp;, kjo mund të shprehet më pak verbosely si:

import std;

int main() {
  std::println("Hello, world!");
}
Remove ads

Biblioteka standarde

Thumb
Standardi draft i "Dokumentit të Punës" që u miratua si C++98; gjysma e madhësisë së tij iu kushtua Bibliotekës Standarde C++.

Standardi C++ përbëhet nga dy pjesë: gjuha bazë dhe biblioteka standarde. Programuesit e C++ presin që kjo e fundit të jetë e pranishme në çdo implementim kryesor të C++; ajo përfshin lloje agregate ( vektorë, lista të lidhura, harta (si harta pemësh dhe harta hash ), bashkësi (si grupe pemësh dhe bashkësi hash ), radhë, pirgje, vargje, tuple ), algoritme ( , , , , etj.), lehtësira hyrëse/dalëse ( rrjedha hyrëse/dalëse, për lexim dhe shkrim në konsolë dhe skedarë), manipulim i sistemit të skedarëve, mbështetje për lokalizimin, tregues inteligjentë për menaxhimin automatik të memories, mbështetje për shprehje të rregullta, bibliotekë me shumë fije, mbështetje për atome (që lejon që një variabël të lexohet ose shkruhet nga më së shumti një fije në të njëjtën kohë pa ndonjë sinkronizim të jashtëm), shërbime kohore (matje, marrje e kohës aktuale, etj.), një sistem për konvertimin e raportimit të gabimeve që nuk përdor përjashtime C++ në përjashtime C++, gjeneratorë numrash të rastësishëm dhe një version paksa i modifikuar i bibliotekës standarde C (për ta bërë atë të përputhet me sistemin e tipit C++).

Dizajni i bibliotekës standarde C++, ashtu si biblioteka standarde C, është minimalist dhe përmban vetëm veçoritë kryesore për programim, duke mos pasur shumicën e veçorive më të specializuara të ofruara nga biblioteka standarde Java ose biblioteka standarde C# . Për më shumë veçori, disa biblioteka të palëve të treta, të tilla si bibliotekat Boost dhe Bibliotekat POCO C++, të cilat ofrojnë veçori shtesë, mund të përdoren për të plotësuar bibliotekën standarde.

Një pjesë e madhe e bibliotekës C++ bazohet në Bibliotekën Standarde të Shablloneve (STL). Mjetet e dobishme të ofruara nga STL përfshijnë kontejnerë si koleksione objektesh (si vektorë dhe lista ), iteratorë që ofrojnë qasje në kontejnerë të ngjashëm me vargun dhe algoritme që kryejnë operacione të tilla si kërkimi dhe renditja.

Për më tepër, ofrohen (shumë) harta ( vargje asociative ) dhe (shumë) grupe, të cilat eksportojnë ndërfaqe të pajtueshme. Prandaj, duke përdorur shabllone është e mundur të shkruhen algoritme gjenerike që funksionojnë me çdo kontejner ose në çdo sekuencë të përcaktuar nga iteratorët.

Ashtu si në C, veçoritë e bibliotekës mund të aksesohen duke përdorur direktivën #include për të përfshirë një kokë standarde . Biblioteka Standarde C++ ofron 105 kokë standarde, nga të cilat 27 janë të vjetruara. Me futjen e moduleve në C++20, këto kokë mund të aksesohen me import, dhe në C++23, e gjithë biblioteka standarde tani mund të importohet direkt si vetë moduli, me import std; . Aktualisht, biblioteka standarde C++ ofron dy module, std dhe std.compat (një modul kompatibiliteti për std i cili eksporton objektet e bibliotekës standarde C në hapësirën globale të emrave).

Standardi përfshin STL-në që u krijua fillimisht nga Alexander Stepanov, i cili eksperimentoi me algoritme dhe kontejnerë gjenerikë për shumë vite. Kur filloi me C++, më në fund gjeti një gjuhë ku ishte e mundur të krijoheshin algoritme gjenerikë (p.sh., renditja STL) që performonin edhe më mirë se, për shembull, biblioteka standarde C qsort, falë veçorive të C++ si përdorimi i inlinimit dhe lidhjes në kohën e kompilimit në vend të treguesve të funksioneve. Standardi nuk i referohet asaj si "STL", pasi është thjesht një pjesë e bibliotekës standarde, por termi përdoret ende gjerësisht për ta dalluar atë nga pjesa tjetër e bibliotekës standarde (rrjedhat hyrëse/dalëse, ndërkombëtarizimi, diagnostikimi, nëngrupi i bibliotekës C, etj.). [67]

Shumica e kompiluesve C++, dhe të gjithë ata kryesorë, ofrojnë një implementim të bibliotekës standarde C++ që përputhet me standardet.

Remove ads

Udhëzimet kryesore të C++

Udhëzimet C++ Core [68] janë një iniciativë e udhëhequr nga Bjarne Stroustrup, shpikësi i C++, dhe Herb Sutter, organizatori dhe kryetari i Grupit Punues C++ ISO, për të ndihmuar programuesit të shkruajnë 'C++ Modern' duke përdorur praktikat më të mira për standardet gjuhësore C++11 dhe më të reja, dhe për të ndihmuar zhvilluesit e kompajlerëve dhe mjeteve të kontrollit statik për të krijuar rregulla për kapjen e praktikave të këqija të programimit.

Qëllimi kryesor është të shkruhet në mënyrë efikase dhe të vazhdueshme C++ i sigurt për llojet dhe burimet.

Udhëzimet Themelore u njoftuan [69] në fjalimin kryesor hapës në CPPCon 2015.

Udhëzimet shoqërohen nga Biblioteka e Mbështetjes së Udhëzimeve (GSL), [70] një bibliotekë vetëm për kokën e faqes me lloje dhe funksione për të zbatuar Udhëzimet Bazë dhe mjete kontrolli statik për zbatimin e rregullave të Udhëzimeve. [71]

Remove ads

Pajtueshmëria

Për t'u dhënë shitësve të kompiluesve më shumë liri, komiteti i standardeve C++ vendosi të mos diktojë zbatimin e manipulimit të emrave, trajtimit të përjashtimeve dhe karakteristikave të tjera specifike të zbatimit. Ana negative e këtij vendimi është se kodi objekt i prodhuar nga kompilues të ndryshëm pritet të jetë i papajtueshëm. Megjithatë, ka përpjekje për të standardizuar kompiluesit për makina ose sisteme operative të veçanta. Për shembull, Itanium C++ ABI është i pavarur nga procesori (pavarësisht emrit të tij) dhe zbatohet nga GCC dhe Clang. [72]

Me C


C++ shpesh konsiderohet si një mbibashkësi e C, por kjo nuk është plotësisht e vërtetë. [73] Shumica e kodit C mund të kompilohet lehtësisht në mënyrë korrekte në C++, por ka disa ndryshime që bëjnë që disa kode të vlefshme C të jenë të pavlefshme ose të sillen ndryshe në C++. Për shembull, C lejon konvertimin implicit nga void* në lloje të tjera treguesish, por C++ nuk e bën këtë (për arsye sigurie të tipit). Gjithashtu, C++ përcakton shumë fjalë kyçe të reja, të tilla si new dhe class, të cilat mund të përdoren si identifikues (për shembull, emra variablash) në një program C.

Disa papajtueshmëri janë hequr nga rishikimi i vitit 1999 i standardit C ( C99 ), i cili tani mbështet veçoritë e C++ siç janë komentet e rreshtave ( // ) dhe deklaratat e përziera me kod. Nga ana tjetër, C99 prezantoi një numër veçorish të reja që C++ nuk i mbështeste, të cilat ishin të papajtueshme ose të tepërta në C++, siç janë vargjet me gjatësi të ndryshueshme, llojet e numrave kompleksë vendas (megjithatë, klasa std::complex në bibliotekën standarde C++ ofron funksionalitet të ngjashëm, megjithëse jo të pajtueshëm me kodin), inicializuesit e caktuar, literalët e përbërë dhe fjala kyçe restrict . [74] Disa nga veçoritë e prezantuara nga C99 u përfshinë në versionin pasues të standardit C++, C++11 (nga ato që nuk ishin të tepërta). [75] [76] [77] Megjithatë, standardi C++11 prezanton papajtueshmëri të reja, siç është moslejimi i caktimit të një literali vargu në një tregues karakteri, i cili mbetet i vlefshëm në C.

Për të ndërthurur kodin C dhe C++, çdo deklarim ose përkufizim funksioni që do të thirret/përdoret si në C ashtu edhe në C++ duhet të deklarohet me lidhje C duke e vendosur atë brenda një extern "C" {/*...*/} Blloku extern "C" {/*...*/} . Një funksion i tillë mund të mos mbështetet në veçoritë që varen nga shtrembërimi i emrit (p.sh., mbingarkesa e funksionit).

Montimi në linjë

Programet e zhvilluara në C ose C++ shpesh përdorin assembly inline për të përfituar nga funksionalitetet e tij të nivelit të ulët, shpejtësia më e madhe dhe kontrolli i përmirësuar krahasuar me gjuhët e programimit të nivelit të lartë [78] kur optimizimi për performancë është thelbësor. C++ ofron mbështetje për integrimin e gjuhës së assembly duke përdorur deklaratat asm, por përputhshmëria e assembly inline ndryshon ndjeshëm midis kompiluesve dhe arkitekturave. Ndryshe nga veçoritë e gjuhës së nivelit të lartë si Python ose Java, kodi i assembly varet shumë nga procesori themelor dhe implementimi i kompiluesit.

Variacionet midis kompiluesve

Kompilatorë të ndryshëm C++ implementojnë asamblenë inline në mënyra të ndryshme.

  • GCC ( GNU Compiler Collection ) dhe Clang : [79] Përdorni sintaksën e zgjeruar të assembly inline të GCC. Përdorimi i fjalës kyçe __asm__ në vend të asm kur shkruani kod që mund të kompilohet me opsionet -ansi -std gjë që lejon specifikimin e operandeve hyrëse/dalëse dhe regjistrave të mbyllur. Kjo qasje është përdorur gjerësisht, duke përfshirë edhe kompilatorët Intel dhe IBM .
  • MSVC ( Microsoft Visual C++ ): Asambleri inline është i integruar në kompilator. Më parë, asambleja inline mbështetej nëpërmjet fjalës kyçe __asm, por kjo mbështetje është hequr në modalitetin 64-bit, duke kërkuar module të veçanta .asm. [80]
  • TI ARM Clang dhe Kompilatorët e Ndërthurur: [81] Disa kompilatorë të sistemeve të ndërthurura, si TI Arm Clang i Texas Instruments, lejojnë montimin në linjë, por vendosin rregulla më të rrepta për të shmangur konfliktet me konventat e regjistrave dhe konventat e thirrjes.

Ndërveprimi midis C++ dhe Assembly

C++ ofron dy metoda kryesore për integrimin e kodit ASM.

1. Skedarët e montimit të pavarur – Kodi i montimit shkruhet veçmas dhe lidhet me kodin C++. [82]

2. Asambleja në linjë – Kodi i asamblesë është i integruar brenda kodit C++ duke përdorur zgjerime specifike për kompajlerin.

Remove ads

Shih edhe

  • Stampa:Portal Computer programming
Wikibooks:Category
Wikibooks:Category
Wikibooks ka më shumë informacione për ketë temë:
  • Carbon (gjuhë programimi) — zhvillim në Google që potencialisht do të jetë një pasardhës i C++
  • Krahasimi i gjuhëve të programimit
  • Lista e kompiluesve C++
  • Lista e programeve dhe mjeteve C++
  • Lista e librave të programimit C++
  • Skica e C++
  • Kategoria:Biblioteka C++

Shënime

Referime

Lexime të mëtejshme

Lidhje të jashtme

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads