„C (programozási nyelv)” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
a Visszaállítottam a lap korábbi változatát: 31.46.240.247 (vita) szerkesztéséről TurkászBot szerkesztésére
48. sor:
* <code>void</code> típusú függvény és <code>void *</code> adattípus
* függvények, melyek <code>struct</code> vagy <code>union</code> típusokat voltak képesek visszaadni (return)
* különböző struktúráknak lehetnek azonos nevű mezői (Korábbankorábban az összes struktúra összes mezője egy közös névtéren osztozott!)
* struktúra típusú változók értékadása (korábban ezt csak a <code>memcpy</code> függyvénnyelfüggvénnyel lehetett megtenni)
* <code>const</code> definíció, az érték írásvédettségéhez
* szabvány [[programkönyvtár]] (library), mely a különböző cégek leggyakrabban támogatott függvényeit tartalmazta
62. sor:
[[1983]]-ban az [[Amerikai Nemzeti Szabványügyi Hivatal]] (angolul: American National Standards Institute, röviden ANSI) megalakította az X3J11 bizottságot, hogy létrehozzanak egy egységes (szabvány) C definíciót. A hosszú és fáradságos folyamat végén [[1989]]-ben elkészült a szabvány (egy évvel az első C++ ANSI szabvány után!) és jóváhagyták mint: ANSI X3.159–1989 „A C programozási nyelv”. A nyelvnek ezt a verzióját nevezik ANSI C-nek. [[1990]]-ben az ANSI C szabványt (néhány apróbb módosítással) átvette a [[Nemzetközi Szabványügyi Szervezet]] (angolul: International Organization for Standardization, röviden ISO) mint [[ISO/EC 9899:1990]].
 
Az ANSI C szabványosítás egyik célja az volt, hogy a K&R C-ből és a nem hivatalos bővítésekből egy egységeset alakítson ki. Belevettek azonban számos új megoldást is, mint például [[függvény prototípus]]t (a C++ nyelvből) valamint egy jobban alkalmazható (fejlettebb) előfordítót (preprocessorpreprocesszor).
 
ANSI C-t szinte minden fordító támogat. A legtöbb C kód, mely manapság íródott, az ANSI C-n alapul. Bármilyen program, amely a szabvány C-ben íródott, helyesen működik bármely [[platform]]on, amelyen szabványos C létezik. Vannak azonban programok, melyek csak adott platformon vagy adott fordítóval fordíthatók le, a használt nem szabvány függvénygyűjtemények miatt (például grafikus függvények) és vannak olyan fordítók, melyek nem támogatják alapértelmezésben az ANSI C szabványt.
83. sor:
 
=== C11 ===
2007-ben kezdődött a munka a C sztenderd egy másik revíziójával kapcsolatban, amit informálisan "C1X"-nek hívtak egészen addig, míg hivatalosan is nem publikálták 2011. december 8-adikánán. A C sztenderdek tanácsa elfogadta az ajánlásokat az új lehetőségek limitált beépítésére, amelyeket még nem kezdtek el tesztelni létező implementáción.
 
A C11 sztenderd számos új lehetőséget adott hozzá a C és könyvtárakhoz, beleértve a típus generikus makrókat, anonímanonim struktúrákat, javított Unicode támogatást, atomi operációkat, többszálúságot és határ ellenőrző függvényeket. Továbbá elkészítették a létező C99 könyvtár néhány portolását, és javították a kompatibilitást a C++-alszal.
 
== A C nyelv jellemzői ==
99. sor:
== Formai szabályok ==
 
A nyelv utasításai a [[#preproc|preprocesszor-utasítások]] kivételével szabad formátumúak: ahol egy helyköz megengedett, ott akárhány helyköz, tabulátor, új sor lehet. A nyelv szavai (utasításnevek, változónevek, számok, műveleti jelek, stb.) között lehet helyköz, de nem kötelező. Az utasítások pontosvesszővel végződnek. Az üres utasítás az előző utasítás vége után tett pontosvessző. A folytatósor – a sor végi <code>\</code> – a szabad formátum miatt csak preprocesszor-utasításokban használatos.
 
A megjegyzéseket <code>/*</code> és <code>*/</code> közé kell zárni, és szabvány szerint nem skatulyázhatók egymásba, bár sok fordítóprogram mégis megengedi. Az ANSI C-től kezdve használható a <code>//</code>, mely a sor végéig tartó megjegyzést vezet be (a [[C++]]-hoz hasonlóan). Hosszabb megjegyzéseket a <code>#if 0</code>...<code>#endif</code> közé is lehet tenni; ezek – lévén preprocesszor-utasítások – egymásba skatulyázhatók.
236. sor:
C-ben függvényen belül nem lehet függvényt definiálni, ezért a függvényen (blokkon) kívüli adatok mindig statikusak, azaz a program indulásától kezdve ugyanazon a memóriaterületen vannak, így ezt a tényt nem kell külön megadni. A blokkon kívüli <code>static</code> kulcsszó az adat vagy függvény láthatóságát a forrásfájlon belülre korlátozza. A blokkon kívül deklarált, <tt>static</tt> nélküli változó és a <tt>static</tt> nélküli függvény globális.
 
Globális változóra vagy függvényre a program többi forrásfáljábólforrásfájljából az <code>extern</code> kulcsszóval hivatkozhatunk, melyben meg kell adni a változó nevét, típusát és a tárolási osztályt. Hogy ne kelljen mindezt többször leírni, általában saját header-fájlokat használunk, melyeket minden forrásfájl betölt a [[##include|<code>#include</code>]] [[#preproc|preprocesszor-utasítással]]. <tt>extern</tt> változónak nem lehet kezdőértéke. A program valamelyik forrásfájljában (általában a főprogramban) a változót <tt>extern</tt> nélkül kell deklarálni, és itt kaphat kezdőértéket.
 
==== Tárolási osztály ====
258. sor:
A tárolási osztály adja meg, hogy az adat a program melyik memóriaterületére kerül (lásd jobb oldali táblázat, középső oszlop).
 
A [[#blokk|blokkon]] (függvényen) kívül deklarált adat mindig statikus, a blokkon belüli – ha mást nem adunk meg – dinamikus. Blokkon belüli adat a <code>static</code> kulcsszóval tehető statikussá, és az <code>extern</code> jelzi, hogy másik forrásprogambanforrásprogramban van deklarálva. Az <tt>extern</tt> kulcsszót blokkon kívül szokás használni, és mindig statikus adatra vonatkozik.
 
A statikus adatnak állandó helye (memóriacíme) van. A dinamikus adat a veremben tárolódik, a blokkba belépéskor foglalódik le a helye, kilépéskor felszabadul, kezdőértéke definiálatlan.
851. sor:
A függvények pufferelnek: a kiírt adatok a memóriába kerülnek, és csak bizonyos mennyiség után, a fájl lezárásakor (<tt>fclose</tt>) vagy a <tt>fflush</tt> függvény meghívására íródnak ki.
 
A printf és scanf függvénycsaládnak a formátumot stringben kell megadni. A formátum <code>%</code>-jellel kezdődik, és az adat típusára utaló betűvel végződik. A kettő között további információkat lehet megadni. A formátumstring utáni első paraméter az első %-hoz tartozó adat, stb. A paraméterek száma tetszőleges, de a %-ok és a paraméterek párban kell legyenek.
 
Az <tt>sprintf</tt> függvény fájl helyett karaktertömbbe írja a kimenetet. A <tt>sscanf</tt> karaktertömbből veszi a bemenetet. A két családnak további függvényei is vannak.