Úvodní stránka | Tato stránka v originále

C programovací jazyk

C je programovací jazyk vyvinut Dennisem Ritchieem, v brzy sedmdesátá léta, pro použití na Unixu operační systém. To je nyní používáno na prakticky každém operačním systému, a je nejvíce populární jazyk pro psaní programové vybavení, ačkoli to je také užité na napsaní přihlášek. To je také běžně používané v informatice vzdělání. Populární C + + programovací jazyk je umístěný na C.

Tabulka s obsahem
1 rysy
2 historie
3 “ahoj, svět!” v C
4 anatomie C program
5 Undefined chování
6 odkazy a odkazy

Rysy

C je relativně minimalistický programovací jazyk. To je významně nižší-úroveň než většina jiných programovacích jazyků. Dokonce ačkoli to je někdy odkazoval se na jak”jazyk vysoké úrovně”, to je jen opravdu vyšší-úroveň než různé jazyky symbolických instrukcí.

C má dvě důležité výhody přes shromáždění. Firstly, kód je obecně snadnější ke čtení a hodně méně těžký psát, obzvláště pro zdlouhavé programy. Secondly, kód shromáždění je obvykle použitelný jen k přesný architektura počítače, zatímco C program může být ported k nějaké architektuře na kterém C kompilátor a jistý požadovaný knihovny existují. (C kód je téměř vždy zkompilovaný, poněkud než interpretovaný.) na druhé straně, efektivita C kód je poněkud závislý na schopnosti kompilátora optimalizovat vyplývat programovací jazyk, který je velmi ven kontroly programátora. V kontrastu, výkonnost kódu shromáždění je přesně předurčená od té doby, co shromáždění je jen člověk-čitelný zápis pro programovací jazyk. Z tohoto důvodu, programuje takový jak provozní systém kernelss, ačkoli většinou psaný v C, smět obsahovat “ruka-ladil” fragmenty jazyka symbolických instrukcí kde výkon je obzvláště velmi důležitý.

Podobné výhody a disadvantages rozlišovat C od vyšší-jazyky úrovně: efektivita C kód může být více blízko kontrolovaný, u ceny bytí obecně více obtížný číst a psát. Poznámka, nicméně, to C je přinejmenším jak přenosný jak vyšší-jazyky úrovně, protože nowadays většina architektur počítače je vybaveno s C kompilátor a knihovny; ve faktu, kompilátorech, knihovnách a tlumočnících vyšší-jazyky úrovně jsou často realizovány v C!

Jeden z nejpozoruhodnějších rysů C je že to je nahoru k programátoru řídit obsah paměti počítače. Standard C poskytuje žádné talenty na sadové hranice kontrolovat to nebo automatický odvoz odpadu. V kontrastu, Java a C # jazyky, oba potomci C, poskytovat automat správa paměti, včetně odvozu odpadu. Zatímco manuální správa paměti opatří programátorovi větší odchylku v ladění výkon programu, to také usnadní to produkovat chyby zahrnovat chybné pamětové operace, takový jak vyrovnávací paměť přetéká. Chyby tito třídí získali proslulost pro jejich účinky na nejistotu počítače. Některé nástroje byly vytvořené k nápovědě C programátoři vyhnou se pamětovým chybám, včetně knihoven pro sadu předvádění ověřování hranic a automatický odvoz odpadu, a automatizované zdrojové kódové dámy takový jako Lint.

Některé ty specifické znaky C být:

Historie

Časné vývoje

Počáteční vývoj C nastal u U a T; Bell laboratoře mezi 1969 a 1973; shodovat se k Ritchieovi, nejtvořivější období vyskytovalo se v 1972. To bylo jmenováno “C” protože mnoho z jeho rysů byl odvozen z časnějšího jazyka nazvaný”B”. Účty se liší pozorovat původy jména “B”: Ken Thompson připočítá BCPL programovací jazyk, ale on také vytvořil jazyk volal Bon v jeho cti manželka Bonnie.

1973, C jazyk stal se silný dost ta většina Unixu jádro, původně zapsaný PDP-11/20 jazyk symbolických instrukcí, byl přepsán v C. toto byl jeden z prvních jádr operačního systému realizovaných v jazyce jiný než shromáždění, časnější příklady být Multics systém (zapsaný PL/já) a Tripos (zapsaný BCPL.)

K&R C

V 1978, Ritchie a Brian Kernighan vydal první vydání C programovací jazyk. Tato kniha, známý k C programátoři jak “K a R”, sloužil na mnoho let jak neformální specifikace jazyka. Verze C že to popíše je obyčejně odkazoval se na jak “K a R C.” (druhé vydání knižních obálek pozdnější ANSI C standard, popsal dole.)

K a R představil následující rysy k jazyku:

K a R C je často považován za nejvíce základní část jazyka, který je nutný pro C kompilátor k podpoře. Na mnoho let, dokonce po zavedení ANSI C, to bylo považováno za “nejnižší společný jmenovatel” to C programátoři drželi se, když maximální přenositelnost byla požadovaná, protože ne všichni kompilátoři byli aktualizováni úplně podporovat ANSI C, a rozumně dobře-psaný K a R C kód je také legální ANSI C.

V rokách po publikaci K a R C, několik “neoficiálních” rysů bylo přidáno k jazyku, podporovaný kompilátory od u a T a někteří jiní prodavači. Tito obsahovali:

ANSI C a ISO C

Během pozdní sedmdesátá léta, C začal nahradit Základní jako prokládání mikropočítačový programovací jazyk. Během osmdesátých lét, to bylo přijato k použití s IBM PCa jeho popularita začala ke zvýšení významně. Současně, Bjarne Stroustrup a jiní u Bell laboratoře začaly práci na sčítajícím objektově orientovaném programování pojmy jazyka k C. jazyk, který oni produkovali, nazvaný C + +, je nyní nejvíce obyčejný aplikační programovací jazyk na Microsoft Windows operační systém; C zůstane více populární ve světě unixu.

V 1983, Američan institut národních norem (ANSI) ustavil výbor, X3J11, založit specifikaci standardu C. po dlouhém a svízelném procesu, standard byl dokončen v 1989 (jeden rok po první ANSI standard pro C + +!) a ratifikovaný jako ANSI X3.159-1989 “programovací jazyk C”. Tato verze jazyka je často odkazoval se na jak ANSI C. V 1990, ANSI C standard (s nemnoho menších modifikací) byl adoptován Organizací mezinárodních úrovní (ISO) jak ISO/IEC 9899: 1990.

Jeden z cílů ANSI C proces standardizace měl produkovat superset K a R C, včlenit mnoho z neoficiálních rysů následovně představil. Nicméně, výbor standardů také zahrnoval několik nových rysů, takový jako prototypy funkce (půjčil si od C + +), a schopnější preprocesor.

ANSI C je nyní podporován téměř všichni široce použití kompilátoři. Nejvíce C kód být psán nowadays je založený na ANSI C. nějaký program psaný jediný ve standardu C je zaručil hrát správně na nějaké platformě s přizpůsobovat se C implementace. Nicméně, mnoho programů bylo psané to bude jen překládat na jisté platformě, nebo s jistým kompilátorem, náležitý k (i) použití nestandardních knihoven, např. pro grafické displejea (ii) někteří kompilátoři ne se držet ANSI C standard, nebo jeho nástupce, v jejich standardním režimu.

C99

Po ANSI standardizačním procesu, C specifikace jazyka zůstala relativně statická na nějakou dobu, zatímco C + + pokračoval se vyvinout. (normativní doplněk zákona 1 vytvořil novou verzi C jazyk v 1995, ale tato verze je zřídka potvrzená.) nicméně, standard podstoupil revizi v pozdní devadesátá léta, vést k vydání ISO 9899: 1999 v 1999. Tento standard je obyčejně odkazoval se na jako “C99”. To bylo přijato jako ANSI standard v březnu 2000.

Nové rysy v C99 obsahují:

Zájem v podporovat nové C99 rysy vypadá, že je míchán. Zatímco GCC a několik jiných kompilátorů nyní podporuje většinu z nových rysů C99, kompilátoři tvrdili Microsoft a Borland dělá ne, a tyto dvě společnosti nevypadají, že má zájem přidat takovou podporu.

“Ahoj, svět!” v C

Následující jednoduchá aplikace tiskne”Ahoj, svět” k standardnímu výstupnímu souboru (který je obvykle obrazovka ale síla jsou soubor nebo nějaké jiné hardwarové zařízení). Verze tohoto programu se objevila poprvé v K a R.

\ r \ n # obsahovat \ r \ n \ r \ nint hlavní (nicota) \ r \ n {\ r \ n printf (“ahoj, svět! \ \ n”); \ r \ n návrat 0; \ r \ n} \ r \ n

Anatomie C program

C program sestává z funkcí a proměnných. C funkce jsou jako subrutiny a funkce Fortran nebo procedury a funkce Pascala. Funkce hlavní () je specialita v tom C program vždy začne vykonat na začátku této funkce. Toto znamená to každý C program musí mít hlavní () fungovat.

hlavní () funkce bude obvykle volat jiné funkce pomoci vykonávat jeho práci. Funkce mohou být napsány programátorem, nebo poskytovaný existujícími knihovnami; latter být zpřístupňován tím, že zahrnuje “standardní záhlaví” přes # obsahovat směrnice předběžného zpracování. Jisté knihovní funkce, takový jak printf () v nad příkladem, být definován C standardy; tito jsou odkazoval se na jako standardní knihovna. (implementace C poskytovat všechny standardních knihovních funkcí je nazýván “hoštěnou implementací”; některé implementace nejsou hoštěné, obvykle protože oni nejsou zamýšlel být používán s operačním systémem.) jiné knihovny mohou poskytovat zvláštní funkčnost, takový jako grafické rozhraní, pokročilé matematické operace nebo přístup k platformě- specifické znaky.

Funkce může vrátit hodnotu k prostředí který volalo to. Toto je obvykle jiný C fungovat. hlavní () funkční volací prostředí je operační systém. Proto, v “ahoj, svět!” příklad nahoře, operační systém přijme hodnotu 0 když program skončí. ( printf fungovat nad návraty kolik charakterů bylo tisknuto -- v případě nahoře, 14 -- ale jeho hodnota je účinně ignorována.)

C funkce sestává z typu návratu (nicota jestliže žádná hodnota je vrácena), jedinečný jméno, seznam parametrů v závorce (nicota jestliže tam být žádný) a tělo funkce ohraničené šlemi. syntax funkce tělo je ekvivalentní k tomu složeného příkazu.

Struktury kontroly

volný

Poznámka: vzpružující styl se liší od programátora k programátoru a moci být předmět veliké debaty (“náboženské války”). Vidět Odrazit styl pro další podrobnosti.

Složené příkazy

Složené příkazy v C mají tvar

  {   }

a být používán jako skupina funkce nebo kdekoli že jednotlivý příkaz je očekáván.

Sdělení výrazu

Prohlášení formy

   ;

je výraz sdělení. Jestliže výraz je chybějící, sdělení je nazýváno sdělením nuly.

Sdělení výběru

C má tři druhy sdělení výběru: dva druhy jestliže a přepínač sdělení.

Dva druhy jestliže sdělení být

  jestliže () 
     

a

  jestliže () 
     
  jinde 
     

V jestliže sdělení, jestliže výraz v závorce je nonzero nebo pravdivý, kontrola přejde na pokračování sdělení jestliže. Jestliže jinde klauzule je dar, kontrola přejde na pokračování sdělení jinde klauzule jestliže výraz v závorce je nulový nebo nepravdivý. Dva být disambiguated lícováním jinde k příští předchozí nesrovnatelný jestliže na stejné hnízdící úrovni. Šle mohou být používány nedbat tohoto nebo pro jasnost.

přepínač sdělení přiměje kontrolu, aby byl přenesený do jednoho z několika sdělení se spoléhat na hodnotu výrazu, který musí mít základní typ. Substatement řízený vypínačem je typicky složený. Nějaké sdělení uvnitř substatement může být označeno jedním nebo více případ popisky, který sestávat z klíčového slova případ následovaný konstantním výrazem a pak dvojtečka (:). Ne dva případu konstanty spojené se stejným přepínačem mohou mít stejnou hodnotu. Tam smět být u nejvíce jeden výchozí hodnota štítek se sdružil s vypínačem; kontrola přejde na výchozí hodnota popiska jestliže žádný z případu popisky jsou stejné s výrazem v závorce následovat přepínač. Přepínače mohou být vložené; případ nebo výchozí hodnota štítek je spojován s nejmenším přepínačem, který obsahuje to. Sdělení přepínače mohou “padat-přes”, to je, když jedna sekce případu dokončila jeho provádění, sdělení budou pokračovat být vykonán klesající až do zlomu sdělení je narazeno. Toto může ukázat se užitečné za jistých okolností, novější programovací jazyky zakážou sdělení případu k “padat-přes”. V pod příkladem, jestliže je podáván, sdělení být vykonán a nic více uvnitř šlí. Nicméně jestliže je podáván, oba a být vykonán protože tam je ne přerušení oddělit dvě případová sdělení.

  přepínač () {případ  :
        
     případ  :
        
        se zlomit; standardní:
        
  }

Sdělení iterace

C má tři formy sdělení iterace:

  dělat 
     
  zatímco ();

zatímco ()

pro ( ; ; )

V chvíle a dělat sdělení, substatement je vykonán opakovaně tak dlouho, zatímco hodnota výrazu zůstane nonzero nebo pravdivá. S chvíle, test, včetně všech postranních efektů od výrazu, nastane před každým prováděním sdělení; s dělat, test následuje každou iteraci.

Jestliže všechny tři výrazy jsou přítomné v pro, sdělení

  pro (e1; e2; e3) s;

je ekvivalent k

  e1; zatímco (e2) {s; e3;}

Některý tří výrazů v pro smyčka může být vynechána. Chybějící druhý výraz dělá chvíle nonzero testu, vytvářet nekonečnou smyčku.

Sdělení skoku

Sdělení skoku přenesou kontrolu bezpodmínečně. Tam jsou čtyři druhy sdělení skoku v C: goto, pokračovat, přerušení, a návrat.

goto sdělení vypadá jako toto:

  goto  identifikátor >;

identifikátor musí být popiska umístila ve funkci proudu. Kontrola se přenese do značeného sdělení.

A pokračovat sdělení může objevit se jen uvnitř sdělení iterace a kontroly příčin ke vstupence do smyčky-porce pokračování nejmenší přikládat takové sdělení. To je, uvnitř každého sdělení

  zatímco (výraz) {/ *... * / cont:;}

dělat {/ *... * / cont:;} zatímco (výraz);

pro (nepovinný-expr; optexp2; optexp3) {/ *... * / cont:;}

a pokračovat ne obsahoval uvnitř vložené iterace sdělení je stejné jak cont goto.

přerušení sdělení je používáno vyjít ven pro smyčka, chvíle smyčka, dělat smyčka, nebo přepínač sdělení. Kontrola přejde na sdělení po skončeném sdělení.

Funkce se vrátí k jeho návštěvníkovi návrat sdělení. Když návrat je následovaný výrazem, hodnota je se vrátil k návštěvníkovi funkce. Proudění mimo konec funkce je ekvivalent k návrat s žádným výrazem. V jednom případě, vrácená hodnota je undefined.

Priorita operátorů v C89

     () [] - >. + + -- (obsazení) postfixoví operátoři + + -- * a ~! + - sizeof unární operátory * / % multiplikativní operátoři + - operátoři přísady
     

Deklarace dat

Základní datové typy

Hodnoty v limits.h > a float.h > záhlaví určují rozsahy základních datových typů. Rozsahy plavidlo, dvojitý, a dlouho se zdvojnásobit typy jsou typicky ti zmínili se v IEEE 754 standard.

jménominimální rozsah
znak- 127.. 127 nebo 0.. 255
nepodepsaný znak0..255
podepsaný znak-127..127
int-32767..32767
krátké int-32767..32767
dlouhé int-2147483647..2147483647
plavidlo1e-37.. 1e + 37 (pozitivní rozsah)
dvojitý1e-37.. 1e + 37 (pozitivní rozsah)
dlouho se zdvojnásobit1e-37.. 1e + 37 (pozitivní rozsah)

Sady

Jestliže deklarace suffixed číslem v hranatých závorkách ([]), deklarace je řekl, aby byl deklarace pole. Řetězce jsou jen sady charakteru. Oni jsou skončeni nulou charakteru (reprezentovaný v C '\\0', charakter nuly). Hranice sady nejsou kostkované, a jestliže umístění paměti za sadou je psáno k, to může vyústit v chybu segmentace.

Příklady:

   int myvector [100]; mystring znaku [80]; vznášet se mymatrix [3] [2] = {2.0, 10.0, 20.0, 123.0, 1.0, 1.0} lexikon znaku [10000] [300]; / * 10000 záznamů s maximální 300 připálí každého. * / int [3] [4];

Poslední příklad nahoře vytvoří soubor sad, ale moci být myšlenka jako vícerozměrná sada pro většinu účelů. 12 int hodnoty vytvořily mohl být zpřístupňován takto:

a[0][0]a[0][1]a[0][2]a[0][3]
a[1][0]a[1][1]a[1][2]a[1][3]
a[2][0]a[2][1]a[2][2]a[2][3]

Ukazatele

Jestliže proměnnáhvězdičku (*) v jeho deklaraci to je řekl, aby byl ukazatel.

Příklady:

   int * pi; / * ukazatel na int * / int * api [3]; / * množství 3 ukazatelů na int * / připálit * * argv; / * ukazatel na ukazatel na čaj * /

hodnota u adresy skladoval v ukazateli proměnná může pak být zpřístupňována v programu s hvězdičkou. Například, daný první deklarace příkladu nahoře, * pi je int. Toto je voláno “dereferencing” ukazatel.

Další operátor, &(ampersand), volal adresu-operátora, vrátí adresu proměnné, sada, nebo fungovat. Tak, daný pokračování

  int i, * pi; / * int a ukazatel na int * / pi = a i;

i a * pi mohl být používán zaměnitelně (přinejmenším until pi je soubor k něčemu jinému).

Řetězce

Řetězce mohou být vykonávány bez používání standardní knihovna. Nicméně, knihovna obsahuje mnoho užitečných funkcí pro pracovat s oběma nula-skončil řetězce a unterminated sady znak.

Nejvíce obyčejně použité řetězcové funkce jsou:

Méně důležité řetězcové funkce jsou:

Vstup souboru / výstup

V C, vstup a výstup jsou vykonáváni přes skupinu funkcí ve standardní knihovně. V ANSI/ISO C, ty funkce jsou definovány v stdio.h > záhlaví.

Standard já/O

Tři standard já/O potoky jsou predefined:

Tyto potoky jsou automaticky se otevřel a uzavřel provozním prostředím, oni nemusí a should ne být otevřen výslovně.

Následování příkladu demonstruje jak filtrový program je typicky uspořádaný:

\ r \ n # obsahovat \ r \ n \ r \ nint hlavní () \ r \ n {\ r \ n int c; \ r \ n \ r \ n zatímco (( c = getchar ())! = EOF) {\ r \ n / * dělat různé věci \ r \ n k charakterům * / \ r \ n \ r \ n jestliže (anErrorOccurs) {\ r \ n fputs (“eee chyby nastal \ \ n”, stderr); \ r \ n se zlomit; \ r \ n} \ r \ n \ r \ n / *... * / \ r \ n putchar (c); \ r \ n / *... * / \ r \ n \ r \ n} \ r \ n návrat 0; \ r \ n} \ r \ n

Pomíjivé příkazové linkové argumenty

Parametry dávané na příkazové řádce jsou přešel na C program se dvěma predefined proměnnými - počet příkazových linkových argumentů v argc a jednotlivec argumenty jako sady charakteru v sadě ukazatele argv. Tak příkaz

 myFilt p1 p2 p3 
vyústí v něco jako

(Poznámka: není tam žádná záruka to jednotlivec řetězce jsou sousedící.)

Individuální hodnoty parametrů mohou být zpřístupňovány s argv [1], argv [2], a argv [3].

Undefined chování

An zajímavý (ačkoli jistě ne jedinečný) aspekt C standardy je že chování jistého kódu je řekl, aby byl “undefined”. V praxi, toto znamená, že program produkovaný od tohoto kódu může dělat něco, od (náhodně) pracovní jak zamýšlený k rozbíjet každý čas to je provozováno

Například, dodržování kodexu produkuje undefined chování, protože proměnná b je operován více než jakmile ve výrazu a = b + b++;:

\ r \ n # obsahovat \ r \ n \ r \ nint hlavní (nicota) \ r \ n {\ r \ n int, b = 1; \ r \ n = b + b + +; \ r \ n printf (“% d \ \ n”,); \ r \ n návrat 0; \ r \ n} \ r \ n

Spojení a odkazy

Viz též:

Externí odkazy

Odkazy

Časná verze tohoto článku obsahovala materiál od FOLDOC, použitý se svolením.