C programski jezik. Programski jezik C (C) Programiranje u C-u

Programski jezik C (izgovara se "C") može se opisati kao univerzalan, ekonomičan, s punim skupom operatora, s modernim kontrolnim tokom. Ovaj jezik se ne može nazvati "velikim" jezikom, niti tvrdi da je "jezik visoke razine", on nije stvoren za neke specifične zadatke, naprotiv, pokušali su ga učiniti što učinkovitijim za bilo koju aplikaciju . Ova zanimljiva fuzija ideja ugrađenih u programski jezik C učinila ga je vrlo praktičnim i učinkovitijim za širok raspon problema od drugih, možda čak i naprednijih jezika.

Veza između “C” i UNIX OS-a je vrlo bliska, budući da se ovaj jezik razvio zajedno s “UNIX-om” i većina softvera za ovaj sustav je napisana u njemu. U isto vrijeme, C se ponekad naziva jezikom jer se vjeruje da je prikladno stvarati operativne sustave uz njegovu pomoć; zapravo, programi za obradu baza podataka i igre mogu se pisati u njemu s istim uspjehom.

C je programski jezik niske razine, ali ne biste trebali misliti da je to loše; on jednostavno radi s istim objektima s kojima svako računalo stalno radi, sa simbolima, adresama i brojevima. U ovom slučaju, svi objekti se kombiniraju, uspoređuju ili oduzimaju korištenjem uobičajenih logičkih i aritmetičkih operacija poznatih računalima.

Iako funkcije za rad sa složenim objektima postaju norma u svijetu kodiranja i ugrađene su u sve moderne programske jezike, C, za razliku od drugih, ne može raditi s objektima kao što su niz, popis, niz ili skup. Nema analoga PL/1 operacijama na cijelim nizovima i nizovima.

C radi s memorijom koristeći stack i statističku definiciju; C nema drugih mogućnosti upravljanja memorijom;

Čak ni najosnovniji mehanizmi, ulaz/izlaz, nisu dostupni u jeziku C; u njemu nema ugrađenih funkcija za rad sa sustavom datoteka. Takve operacije visoke razine pružaju se korištenjem biblioteka dodataka.

Također, programski jezik C će odbiti raditi ako trebate multiprogramiranje, sinkronizaciju, paralelne operacije itd. Sadrži mogućnosti isključivo za jednostavan i sekvencijalni rad, njegov element: ciklusi, provjere, grupiranje i potprogrami.

Neki će se možda iznenaditi takvoj škrtosti sredstava koja se daju programerima (“zašto moram pozivati ​​funkciju svaki put kad trebam usporediti par stringova!”), ali s druge strane, upravo zahvaljujući takvim uštedama u fondovima da programi napisani u C-u dobivaju stvarnu prednost u brzini.

S druge strane, mali broj operatora smanjuje vrijeme potrebno za njihovo pamćenje, a trebat će vam samo nekoliko stranica da ih sve pokrijete. I kao što praksa pokazuje, kompajler s "C" je kompaktan alat koji je prilično jednostavan za pisanje. Ako koristite moderne alate, kompajler za potpuno novo računalo bit će spreman za samo nekoliko mjeseci, unatoč činjenici da će 80% njegovog koda biti slično kodu prethodnih verzija. Zbog ove značajke, programski jezik C smatra se vrlo mobilnim. A njegova je učinkovitost tolika da jednostavno nema smisla pisati programe koji su kritični za performanse u asembleru, kao što je to ranije bio slučaj. Najbolji primjer za to je sam UNIX OS, koji je 90% napisan u i za C, gotovo u cijelosti kreiran od strane brojnih programera na ovom istom divnom jeziku, koji se trenutno smatra programskim jezikom broj jedan u svijetu.

Učenje osnova i zamršenosti programskog jezika C++. Udžbenik s praktičnim zadacima i testovima. Želite li naučiti programirati? Onda ste na pravom mjestu - ovdje je besplatna obuka programiranja. Bez obzira jeste li iskusni ili ne, ove lekcije programiranja pomoći će vam da počnete stvarati, kompilirati i otklanjati pogreške u C++ programima u raznim razvojnim okruženjima: Visual Studio, Code::Blocks, Xcode ili Eclipse.

Puno primjera i detaljnih objašnjenja. Savršeno za početnike (dummy) i one naprednije. Sve je objašnjeno od nule do detalja. Ove lekcije (200+) dat će vam dobru osnovu/temelj za razumijevanje programiranja ne samo u C++, već iu drugim programskim jezicima. I to potpuno besplatno!

Također je pokriveno korak-po-korak stvaranje igre u C++, SFML grafička biblioteka i više od 50 zadataka za testiranje vaših vještina i znanja u C++. Dodatni bonus je.

Za ponovno objavljivanje +20 na karmu i moju zahvalnost!

Poglavlje br. 0. Uvod. Početak rada

Poglavlje br. 1. Osnove C++

Poglavlje br. 2. Varijable i osnovni tipovi podataka u C++

Poglavlje br. 3. Operatori u C++

Poglavlje br. 4. Opseg i druge vrste varijabli u C++

Poglavlje br. 5. Redoslijed kojim se kôd izvršava u programu. Petlje i grananja u C++

C je prilično "drevni" programski jezik; nastao je ranih 70-ih. Unatoč tome, C je živi jezik u smislu da se danas aktivno koristi. Izumljen je, korišten i koristi se za pisanje značajnih dijelova programskog koda operativnih sustava sličnih Unixu. Također se koristi za pisanje pomoćnih programa, kompilatora i, rjeđe, aplikacijskih programa. Zato se C naziva sistemskim programskim jezikom.

Njegova opstojnost može se objasniti činjenicom da su principi rada operativnih sustava relativno univerzalni; ne podliježu napretku i raznolikosti koje se mogu uočiti u okruženju desktop i mobilnih softvera, te web aplikacija. C nije jezik visoke razine, bliži je arhitekturi računala. Kao rezultat toga, C programi su kompaktni i brzi.

C ne podržava objektno orijentirano programiranje. OOP podrška je implementirana u C++. Iako je potonji proizašao iz jezika C, on nije njegov “nastavak”, već je zaseban jezik koji se može učiti bez poznavanja C-a. Međutim, učenje C-a je korisno prije upoznavanja njegovog “naprednog mlađeg brata”, jer Sintaksa jezika je slična, C ne preopterećuje mozak programera početnika supermoćima i uči ga da razumije bit onoga što se događa.

Je li C dobar za prvi put u programiranje? Ako ne studirate na sveučilištu u specijalnosti vezanoj za IT, onda ne. C zahtijeva razumijevanje organizacije i rada hardvera, posebice memorije. Puno toga se radi pokazivačima, oni igraju ključnu ulogu; ova je tema prilično teška za razumjeti i obično se ne proučava u školi.

Naravno, možete naučiti osnove programiranja s C-om bez potrebe za učenjem pokazivača. Međutim, osoba će misliti da poznaje C, a da ne zna mnogo o njemu u biti. Jezik C kreirali su profesionalni programeri vješti hardveru za pisanje operativnog sustava UNIX. Nije zamišljen kao jezik za podučavanje početnika.

Okruženja i kompajleri za C programiranje

Ako koristite neku od distribucija GNU/Linuxa, poslužit će bilo koji uređivač teksta s označavanjem sintakse, također ćete trebati GCC i terminal.

Postoje uređivači za programere koji uključuju razne dodatke, uključujući terminal, pregledavanje imenika itd. Na primjer, Geany ili Atom.

C je kompajlirani programski jezik. U GNU/Linuxu se za dobivanje izvršnih datoteka koristi GCC - skup prevoditelja, uključujući prevoditelj za C. Da biste dobili izvršnu datoteku iz izvorne datoteke (obično takve datoteke imaju ekstenziju *.c), trebate pokrenuti naredba u terminalu koja izgleda otprilike ovako:

gcc -o zdravo zdravo.c

Gdje je gcc naredba koja pokreće program koji izvodi kompilaciju i druge radnje; -o – prekidač koji označava da ručno specificiramo naziv izvršne datoteke; hello – naziv rezultirajuće izvršne datoteke; hello.c je naziv datoteke izvornog koda. Naziv izvršne datoteke može se izostaviti:

gcc pozdrav.c

U tom će slučaju izvršna datoteka imati zadani naziv a.out.

Windows ima vlastiti skup prevoditelja - MinGW. Može se koristiti sam, ali je uključen u jednostavno razvojno okruženje Dev-C++, što može biti dobar izbor za učenje programiranja u C i C++.

Prilikom spremanja odaberite vrstu datoteke "C izvorne datoteke (*.c)". Program se kompilira i pokreće pritiskom na tipku F9. Nakon izvršenja, program se odmah zatvara i rezultat se ne vidi. Kako biste spriječili da se to dogodi, napišite dva dodatna retka: #include i getch(). (Ovo možda nije relevantno za noviju verziju Dev-C++.)

"Hello World" u GNU/Linuxu:

#uključi \n") ; }

"Hello World" u sustavu Windows:

#uključi #uključi int main() (printf("Zdravo svijete \n") ; dobiti(); )

S druge strane, postoji velik broj međuplatformskih razvojnih okruženja. Na primjer, Eclipse + CDT modul, KDevelop, CLion. Potonji se plaća, proizvodi ga JetBrains, lider u razvoju IDE-a, ali ima probno razdoblje od 30 dana, što bi moglo biti dovoljno za obuku. CLion je praktičniji od drugih IDE-a.

"Zdravo svijete" u C

Koristeći primjer jednostavnog programa, odmah ćemo primijetiti neke značajke programskog jezika C.

U jeziku C funkcija main() preuzima ulogu glavne grane programa. Ova funkcija uvijek mora biti prisutna u kompletnom C programu i s njom počinje izvršavanje programa. Međutim, varijable deklarirane unutar njega nisu globalne; njihov se opseg proteže samo na main(). Međutim, u programskom jeziku C gotovo sav programski kod sadržan je u funkciji, a funkcija main() je glavna i obavezna.

Prema zadanim postavkama funkcija main() vraća vrstu podataka int, tako da ne morate navesti vrstu povrata. Međutim, prevodilac izdaje upozorenje u ovom slučaju.

Funkcija printf() dizajnirana je za ispis podataka. Njegova je svrha slična postupku write() u Pascalu i funkciji print() u Pythonu. Funkcija printf() ne prelazi u novi red nakon ispisa. Stoga se za prijelaz koristi poseban znak koji se označava kombinacijom \n. Potpuni C izrazi odvojeni su točkom i zarezom.

U C-u I/O funkcije nisu dio jezika. Na primjer, u Pythonu ne trebamo uvoziti nijedan modul da bismo koristili funkcije print() i input(). U C-u ne možemo jednostavno pozvati funkciju printf() jer Sam C to jednostavno nema. Ova funkcija, kao i niz drugih, može se omogućiti pomoću datoteke zaglavlja stdio.h. Upravo je zato redak napisan na početku programa #uključi . Include se s engleskog prevodi kao "uključi", a stdio je skraćenica za "standardni ulaz-izlaz".

Datoteke zaglavlja (završavaju na *.h) obično sadrže deklaracije određenih funkcija. Deklaracija je jednostavno opis funkcije: koje parametre uzima i što vraća. Sam funkcijski kod (definicija) ne nalazi se u datoteci zaglavlja, već u bibliotekama (drugim datotekama), koje su možda već kompajlirane i nalaze se u direktorijima sustava. Prije kompajliranja programa, predprocesor jezika C se, između ostalog, uključuje na početku programske datoteke sadržaj datoteka zaglavlja navedenih u njoj.

Praktični rad

Komentirajte prvi red HelloWorld koda. Pokušajte sastaviti program. Jeste li uspjeli dobiti izvršnu datoteku? Koje je upozorenje dao kompilator?

1 // - jednoredni komentar u C jeziku; /* … */ - višeredni komentar u C jeziku.

Osobitosti

Pregled

Programski jezik C karakterizira minimalizam. Autori jezika željeli su da se programi u njemu lako prevedu pomoću prevoditelja s jednim prolazom, nakon prevođenja svaka elementarna komponenta programa odgovara vrlo malom broju strojnih instrukcija, a korištenje osnovnih elemenata jezika nije uključuju biblioteku za vrijeme izvođenja. Jednoprolazni prevodilac sastavlja program bez vraćanja na već prevedeni tekst. Stoga korištenju funkcije mora prethoditi njezina deklaracija. C kod se može lako napisati na niskoj razini apstrakcije, gotovo kao asemblerski jezik. C se ponekad naziva "univerzalnim asemblerom" ili "assemblerom visoke razine", što odražava razlike u asemblerskim jezicima za različite platforme i jedinstvo C standarda, čiji se kod može kompajlirati bez promjena na gotovo svakom računalu model. C se često naziva jezikom srednja razina ili čak niska razina, s obzirom na to koliko je blizu stvarnih uređaja.

C prevoditelje je relativno lako razviti zbog relativno niske razine jezika i skromnog skupa elemenata. Stoga je jezik dostupan na velikom broju platformi (možda na više platformi nego na bilo kojem drugom postojećem jeziku). Osim toga, unatoč svojoj prirodi niske razine, jezik vam omogućuje stvaranje prijenosnih programa i podržava programera u tome. Programi koji su u skladu s jezičnim standardom mogu se kompajlirati na velikom broju računala.

Program "Zdravo, svijete!"

Ovaj jednostavan program, koji se pojavio u prvom izdanju Programskog jezika C od Kernighana i Ritchieja, obično je prvi program u većini C udžbenika. Ona upisuje poruku "Hello World!" na standardnom izlaznom uređaju (koji je obično monitor (zaslon), ali može biti i datoteka, neki uređaj ili područje u memoriji, ovisno o tome kako se standardni izlazni uređaj odražava na danoj platformi).

Main() ( printf ("Zdravo, svijete! \n") ; }

Iako se ovaj program može ispravno prevesti na većini modernih prevoditelja, on generira nekoliko upozorenja na ANSI C prevodiocima. Također, ovaj kod se neće kompilirati ako kompilator strogo slijedi standard

#uključi int main(void) ( printf ("Zdravo, svijete! \n") ; vratiti 0; )

Prvi redak programa sadrži direktivu pretprocesora #include; kada je naiđe, kompajler je zamjenjuje punim tekstom datoteke na koju se odnosi. U tom će slučaju ovaj redak biti zamijenjen standardnom datotekom zaglavlja

Sljedeći redak je deklaracija funkcije koja se zove main. Ova funkcija u C programu je posebna, jer se prva izvršava pri pokretanju programa, odnosno služi kao tzv. ulazna točka u program.

Vitičaste zagrade iza glavne funkcije označavaju njezinu definiciju. Riječ int kaže da glavna funkcija vraća (izračunava) cijeli broj. Riječ void označava da glavna funkcija ne zahtijeva nikakve parametre ili argumente od pozivatelja.

Sljedeći redak "poziva" ili izvršava funkciju stdio.h i sadrži informacije koje opisuju kako se funkcija treba pozvati. U ovom primjeru, ovoj se funkciji prosljeđuje jedan argument koji sadrži tekstualni niz "Hello, World!\n" . Niz \n prevodi se u znak "novi red", koji, kada se prikaže, označava prijelom retka. Funkcija printf vraća int vrijednost, koja je u ovom primjeru potpuno odbačena.

Naredba return uzrokuje da program zaustavi izvršavanje zadane funkcije (u ovom slučaju glavne), vraćajući pozivnoj funkciji vrijednost navedenu nakon ključne riječi return (0 u ovom slučaju). Budući da je trenutna funkcija main, pozivatelj je onaj koji je pokrenuo program. Posljednja vitičasta zagrada označava kraj definicije glavne funkcije.

Komentari

Tekst okružen simbolima /* i */ ovim redoslijedom prevodilac potpuno zanemaruje. C99-kompatibilni prevoditelji također dopuštaju komentare koji počinju s // i završavaju s novim retkom.

Vrste

Pohrana podataka

Jedna od najvažnijih funkcija svakog programskog jezika je pružanje mogućnosti za upravljanje memorijom i objektima koji su u njoj pohranjeni.

Postoje tri različita načina za dodjelu memorije za objekte u C-u:

  • Statička dodjela memorije: prostor za objekte stvara se u području pohrane podataka programskog koda u vrijeme kompilacije; životni vijek takvih objekata poklapa se sa životnim vijekom ovog koda.
  • Automatska dodjela memorije: objekti se mogu privremeno pohraniti na stog; ta se memorija tada automatski oslobađa i može se ponovno koristiti nakon što program izađe iz bloka koji je koristi.
  • Dinamička dodjela memorije: Blokovi memorije željene veličine mogu se zahtijevati tijekom izvođenja programa korištenjem funkcija biblioteke malloc, realloc i oslobađanje iz memorijskog područja koje se naziva gomila. Ovi blokovi su oslobođeni i mogu se ponovno koristiti nakon pozivanja funkcije za besplatno na njima.

Sve tri ove metode pohrane podataka prikladne su u različitim situacijama i imaju svoje prednosti i nedostatke. Na primjer, statička dodjela memorije nema dodatne troškove dodjele, automatska dodjela ima samo male dodatne troškove dodjele, ali dinamička dodjela ima potencijalno velike dodatne troškove i kod dodjele i kod poništavanja. S druge strane, stack memorija mnogo je ograničenija od statičke ili heap memorije. Samo se dinamička memorija može koristiti u slučajevima kada je veličina korištenih objekata unaprijed nepoznata. Većina C programa intenzivno koristi sve tri ove metode.

Gdje je moguće, preferira se automatska ili statička dodjela memorije jer ovu metodu pohranjivanja objekata kontrolira prevodilac, što programera oslobađa gnjavaže ručnog dodjeljivanja i oslobađanja memorije, što je obično izvor programskih pogrešaka koje je teško pronaći. Nažalost, mnoge podatkovne strukture varijabilne su veličine u vrijeme izvođenja, pa zato što automatski i statički dodijeljena područja moraju imati poznatu fiksnu veličinu u vrijeme prevođenja, vrlo je uobičajeno koristiti dinamičku dodjelu. Nizovi varijabilne veličine najčešći su primjer ove vrste korištenja memorije.

Korišteni skup simbola

Jezik C nastao je nakon uvođenja standarda Fortran; Lisp i Cobol koristili su samo zagrade (), ali C ima zagrade (), kvadratne i vitičaste (). Osim toga, C razlikuje velika i mala slova, dok su stariji jezici koristili samo velika slova.

Problemi

Mnogi C elementi su potencijalno opasni, a posljedice zlouporabe tih elemenata često su nepredvidive. Kernighan kaže: " C je alat oštar poput žileta: može se koristiti za stvaranje i elegantnog programa i krvave zbrke" Zbog relativno niske razine jezika, mnoge zlouporabe opasnih elemenata nisu i ne mogu se otkriti niti tijekom kompilacije niti tijekom izvođenja. To često dovodi do nepredvidivog ponašanja programa. Ponekad se kao rezultat nepismene upotrebe jezičnih elemenata pojavljuju sigurnosne ranjivosti. Treba napomenuti da se korištenje mnogih od ovih elemenata može izbjeći.

Najčešći izvor pogreške je pristup nepostojećem elementu niza. Iako C izravno podržava statičke nizove, nema alate za provjeru indeksa niza (provjere granica). Na primjer, moguće je pisati u šesti element niza od pet elemenata, što će, naravno, dovesti do nepredvidivih rezultata. Poseban slučaj takve pogreške naziva se pogreška prekoračenja međuspremnika. Ove vrste pogrešaka dovode do većine sigurnosnih problema.

Drugi mogući izvor opasnih situacija je mehanizam pokazivača. Pokazivač se može odnositi na bilo koji objekt u memoriji, uključujući izvršni programski kod, a neispravna uporaba pokazivača može proizvesti nepredvidive učinke i dovesti do katastrofalnih posljedica. Na primjer, pokazivač može biti neinicijaliziran ili, kao rezultat netočnih aritmetičkih operacija pokazivača, pokazivati ​​na proizvoljnu memorijsku lokaciju; na nekim platformama rad s takvim pokazivačem može uzrokovati hardversko zaustavljanje programa; na nezaštićenim platformama to može dovesti do oštećenja proizvoljnih podataka u memoriji, a to se oštećenje može pojaviti u najproizvoljnijem trenutku i mnogo kasnije od trenutka korupcija. Također, područje dinamičke memorije na koje se pokazivač odnosi može se osloboditi (pa čak i dodijeliti nakon toga za drugi objekt) - takvi se pokazivači nazivaju "viseći". Ili, obrnuto, nakon manipuliranja pokazivačima na područje dinamičke memorije, možda neće ostati nijedna referenca, a tada ovo područje, zvano "smeće", nikada neće biti oslobođeno, što može dovesti do "curenja memorije" u programu. Drugi jezici pokušavaju riješiti slične probleme uvođenjem restriktivnijih referentnih tipova.

Drugi problem je što se automatski i dinamički stvoreni objekti ne inicijaliziraju i mogu sadržavati vrijednosti preostale u memoriji iz prethodno izbrisanih objekata. Ova vrijednost je potpuno nepredvidiva, mijenja se od jednog stroja do drugog, od pokretanja do pokretanja, od poziva funkcije do poziva. Ako program koristi takvu vrijednost, rezultat će biti nepredvidiv i neće se nužno pojaviti odmah. Moderni prevoditelji pokušavaju dijagnosticirati ovaj problem nekom analizom izvornog koda, iako se općenito to ne može riješiti statičkom analizom.

Još jedan uobičajeni problem je da se memorija ne može ponovno koristiti dok je programer ne oslobodi pomoću funkcije free(). Kao rezultat toga, programer može slučajno zaboraviti osloboditi ovu memoriju, ali ju nastavlja dodjeljivati, zauzimajući sve više i više prostora. To se odnosi na pojam curenje memorije. Nasuprot tome, moguće je prerano osloboditi memoriju, ali je nastaviti koristiti. Budući da sustav dodjele može koristiti oslobođenu memoriju drugačije, to dovodi do nepredvidivih posljedica. Ovi problemi se rješavaju u jezicima koji skupljaju smeće. S druge strane, ako je memorija alocirana u funkciji i mora se osloboditi nakon što funkcija izađe, ovaj problem se rješava automatskim pozivanjem destruktora u C++ ili korištenjem lokalnih polja pomoću C99 proširenja.

Funkcije s varijabilnim argumentom također su potencijalni izvor problema. Za razliku od običnih funkcija koje imaju prototip, standard ne regulira testiranje funkcija s promjenjivim brojem argumenata. Ako se proslijedi pogrešan tip podataka, dolazi do nepredvidivih, ako ne i fatalnih rezultata. Na primjer, obitelj printf standardne biblioteke C, koja se koristi za generiranje formatiranog teksta za izlaz, dobro je poznata po svom potencijalno opasnom sučelju s varijablama-argumentima, koje je opisano nizom formata. Provjera tipa u varijacijskim funkcijama odgovornost je svake pojedinačne implementacije varijabilne funkcije, ali mnogi moderni prevoditelji posebno provjeravaju tipove u svakom pozivu printf, generirajući upozorenja kada popis argumenata ne odgovara nizu formata. Treba napomenuti da je nemoguće statički kontrolirati čak i sve pozive funkcije printf, budući da se formatni niz može kreirati dinamički u programu, tako da prevodilac u pravilu ne provodi nikakve provjere za druge funkcije s promjenjivim brojem argumenata.

Kako bi C programerima pomogli u rješavanju ovih i mnogih drugih problema, stvoren je velik broj alata odvojenih od prevoditelja. Takvi alati uključuju programe za dodatnu provjeru izvornog koda i otkrivanje uobičajenih pogrešaka, kao i biblioteke koje pružaju dodatne funkcije koje nisu uključene u jezični standard, kao što je provjera granica polja ili ograničeni oblik skupljanja smeća.

Priča

Rani razvoj događaja

Programski jezik C razvijen je u Bell Labsu između 1973. i 1973. godine. Prema Ritchieju, najaktivnije razdoblje kreativnosti dogodilo se 1972. godine. Jezik je nazvan "C" (C je treće slovo latinične abecede) jer mnoge njegove karakteristike potječu iz starog jezika "B" (B je drugo slovo latinične abecede). Postoji nekoliko različitih verzija podrijetla imena Bi. Ken Thompson ukazuje na programski jezik

Postoji nekoliko legendi o razlozima razvoja C-a i njegovom odnosu prema operativnom sustavu, kao što su grafički prikazi;

  • neki prevoditelji se standardno ne pridržavaju ANSI C standarda ili njegovog nasljednika; ili
  • dizajnirani su za prilagodbu određene veličine određenih vrsta podataka ili specifičnog načina pohranjivanja tih podataka u memoriju za određenu platformu.
  • C99

    Glavni članak: Godine 1995. napravljen je prvi regulatorni amandman na standard C, ali ga gotovo nitko nije priznao). Međutim, kasnih 1990-ih standard je revidiran, što je dovelo do objave ISO 9899:1999 1999. godine. Ovaj standard se obično naziva "C99". U ožujku 2000. usvojio ga je i prilagodio ANSI.

    Evo nekih novih značajki C99:

    • inline funkcije (inline);
    • nema ograničenja za deklariranje lokalnih varijabli (kao u C++);
    • novi tipovi podataka kao što je long long int (kako bi se olakšao prijelaz s 32- na 64-bitne brojeve), eksplicitni Boolean tip podataka i složeni tip za predstavljanje složenih brojeva;
    • nizovi promjenjive duljine;
    • podrška za ograničene pokazivače (restrict);
    • imenovana inicijalizacija struktura: struct ( int x, y, z; ) point = ( .y=10, .z=20, .x=30 );
    • podrška za komentare u jednom retku koji počinju s //, posuđene iz C++ (mnogi C kompajleri su ih prethodno podržavali kao dodatak);
    • nekoliko novih funkcija knjižnice kao što je snprintf;
    • nekoliko novih datoteka zaglavlja, kao što je stdint.h.

    Interes za podršku novim značajkama C99 trenutno je mješovit. Dok GCC, Sun Microsystemsov C kompajler i nekoliko drugih prevoditelja trenutno podržavaju većinu novih značajki C99, Microsoftovi kompajleri to ne čine i čini se da ih dvije tvrtke ne dodaju.

    Veza sa C++

    Prioritet operacija u C

    Operacije su dolje navedene prema silaznom redoslijedu prioriteta. Operacije navedene u istom retku imaju isti prioritet. Operacije označene R->L asocijativne su desno (to jest, kada se kombiniraju operacije jednakog prioriteta bez zagrada, procjenjuju se s desna na lijevo; međutim, redoslijed kojim se procjenjuju argumenti većine operacija nije određen i ovisi o implementacijama ):

    Postfiksne operacije () . -> ++ --
    Unarne operacije (R->L) ++ -- & * + - ~ ! veličina(tip)
    Multiplikativ * / %
    Aditiv + -
    Smicanje << >>
    Usporedba operacija < > <= >=
    Operacije testiranja jednakosti == !=
    Bitno & ^ |
    mozgalica && ||
    Uvjetni rad (R->L) ?:
    Operacije dodjele (R->L) = *= /= %= += -= <<= >>= &= ^= |=
    Sekvencijalni izračun ,

    Poznati C kompajleri

    • OpenWatcom

    Kompajleri za dinamičke jezike i platforme

    Ponekad, kako bi se određene biblioteke, funkcije i alati napisani u C-u prenijeli u drugo okruženje, potrebno je prevesti C kod u jezik više razine ili u kod virtualnog stroja dizajniran za takav jezik.

    U te svrhe namijenjeni su sljedeći projekti:

    • Alchemy je C/C++ kompajler za Flash i Adobe AIR aplikacije.
    • AMPC - C kompajler za virtualni stroj

      Bilješke

      vidi također

      • Cyclone (programski jezik) - siguran dijalekt C jezika
      • Kategorija:C kompajleri

      Linkovi

      • ISO/IEC JTC1/SC22/WG14 službena početna (engleski) . - Službena stranica međunarodne radne skupine za standardizaciju programskog jezika C. Preuzeto 20. veljače 2009.