Gjuhët C/C++: Karakteristikat Bazë
Karakteristikat bazë të gjuhës C i përkasin edhe gjuhës C++ e cila është gjuha më e afërt me të. Pëveç kësaj, një pjesë e konsiderueshme e tyre janë huazuar edhe nga gjuhët e tjera bashkëkohore të paraqitura në figurën e mësipërme të cilat janë ndikuar nga gjuhët C dhe C++. Disa elementë themelor të përfshirë në gjuhën C janë:
- Një bashkësi fjalësh kyçe që përdoren kryesisht për kontrollin e fluksit të programit dhe tipet bazë të të dhënave, ndër të cilat përmendim: if/else, for, do/while, while, switch, goto, continue, int, float, double, struct, etj.
- Një numër i konsiderueshëm operatorësh aritmetikë, binarë dhe logjikë si +,-, *, /, &, ||, etj.
- Janë të mundur disa caktime (pra më shumë se një) vlerash në një shprehje të vetme.
- Funksionet kthejnë vlera të cilat mund të shpërfillen nëse nuk nevojiten.
- Tipet e të dhënave janë statike por jo fortësisht të detyruara; çdo e dhënë ka një tip të caktuar por mund të kryhet konvertim implicit i tipit të të dhënës në një tip tjetër.
- Sintaksa e deklarimeve imiton kontekstin e përdorimit. Gjuha C nuk ka fjalë kyçe “define”. Fillimi i një deklarimi konsiderohet çdo shprehje që fillon me emrin e një tipi të dhënash. Gjithashtu, nuk ka fjalë kyçe “function” dhe përcaktimi i funksioneve kuptohet nga kllapat e listës së argumentave të tyre.
- Është e mundur që përdoruesit të krijojnë tipe të reja apo të përbëra me anë të typedef.
- Struktura (struct) mundëson krijimin e tipeve të përbëra heterogjene, ku secili element përbërës mund të përpunohet si një njësi.
- Për vektorët dhe matricat nuk ka ndonjë fjalë kyçe dhe për t’i dalluar përdoren kllapat katrore në fund të emërtimit.
- Tipet enumeracion krijohen me fjalën kyçe enum dhe janë të ndërkëmbyeshëm me numra të plotë.
- Gërmëvargu (string) nuk është tip i veçantë por formohet si një vektor karakteresh që mbaron me null.
- Qasja në kujtesën e kompjuterit mund të kryhet duke i kthyer adresat e makinës në madhësi të tipit shënjues (pointer).
- Procedurat (nënrutinat që nuk kthejnë vlerë) janë raste të veçanta funksionesh me vlerë kthimi pa tip të quajtur void.
- Nuk mund të përcaktohen funksione në fushëveprimin leksikor (p.sh. në brendësi të përcaktimit) të funksioneve të tjera.
- Shënjuesit te të dhënat dhe funksionet mund të përdoren për të arritur njëfarë polimorfizmi.
- Paraprocesori mundëson veprime të ndryshme si kompilimin e kushtëzuar, përfshirjen e skedave, përcaktimin e makrove apo vlerave simbolike, etj.
- Ofrohet modularitet në kompilimin e kodit. Skedat mund të kompilohen veçmas dhe të lidhen bashkë. Kontrolli i shikueshmërisë së funksioneve dhe objekteve të të dhënave nga skedat e tjera kryhet nëpërmjet atributeve static dhe extern.
- Funksionet komplekse që kanë të bëjnë me hyrje-daljet, manipulimin e gërmëvargjeve, si dhe funksione të tjera matematike janë të vendosura në librari të rutinave.
Cilësi të gjuhëve më të reja (p.sh. orientimi nga objektet dhe mbledhja e mbeturinave) që nuk gjenden te gjuha C mund të emulohen nëpërmjet përdorimit të librarive të jashtme (p.sh. GLib Object System apo Boehm garbage collector). Të gjithë elementët e listuar më sipër e bëjnë C-në një gjuhë të thjeshtë, në kuptimin që ajo ofron një mënyrë të strukturuar dhe modulare për zgjidhjen e problemeve. Pra programet ndërtohen duke i organizuar në pjesë nëpërmjet funksioneve. Këta të fundit bëjnë të mundur që kodi të jetë i lehtë për t’u kuptuar dhe modifikuar, si dhe lehtësojnë ripërdorimin e tij.
Ndryshe nga gjuhët e nivelit të ulët, gjuha C mund të ekzekutohet në makina të ndryshme pa ose me fare pak ndryshime, pra kodi i gjuhës C është i mbartshëm. C-ja përveç cilësive për programim të nivelit të ulët, ofron dhe funksione të gjuhëve të nivelit të lart. Për këtë arsye, kjo gjuhë konsiderohet si një gjuhë e nivelit të mesëm. Instalimet e gjuhës C ofrojnë një bashkësi të pasur librarishë dhe funksionesh të gatshme të cilët e shpejtojnë zhvillimin e programeve. Përveç kësaj, kodi C është lehtësisht i zgjerueshëm dhe modulet e niveleve të ndryshme (funksione, librari, etj.) shtohen lehtë. Caktimi dinamik i kujtesës është një cilësi që i jep programuesit fuqi të madhe veprimi. Pjesë të ndryshme të kujtesës përdoren kur nevojiten dhe mund të lirohet kur nuk nevojiten më, pra përdorimi i kujtesës mund të optimizohet.
Element tjetër që ofron fuqi të madhe veprimi dhe gjithashtu kontroll të madh në qelizat e kujtesë është mekanizmi i shënjuesve (pointers). Këta të fundit mund të mbajnë jo vetëm adresën e të dhënave bazë, por edhe të strukturave, matricave, funksioneve, etj. Rekursioni, pra aftësia për të thirrur një funksion brenda vetes së tij jep shumë liri në veprim, sidomos kur është fjala për llogaritje shkencore. Algoritmat rekursive të shprehur në C janë shumë elegant dhe bëjnë të mundur ripërdorimin e kodit të funksioneve, pra arritjen e rezultateve me më pak rreshta kodi. Së fundmi, është e rëndësishme të përmendet fakti se kompilimi dhe ekzekutimi i kodit në C është shumë i shpejtë. Kjo e bën këtë gjuhë ideale për zhvillimin e sistemeve operative, softuerit komandues, aplikimeve me kërkesa të larta performance, etj.