C (programovací jazyk): Rozdiel medzi revíziami

Viacrozmerné polia sú potrebné napríklad v numerických algoritmoch (hlavne z aplikovanej lineárnej algebry) na ukladanie [[matica (matematika)|matíc]] (reprezentácií lineárnych zobrazení). Štruktúra poľa v C nie je ani dobre prispôsobená ani vhodná na túto konkrétnu úlohu. Tento problém je rozobraný v knihe Numerical Recipes in C, kap. 1.2, str. 20 ff ([http://www.library.cornell.edu/nr/bookcpdf/c1-2.pdf]). Nájdete tam aj riešenie používané v tejto knihe. Je to zároveň slabina aj silné miesto C, že problém existuje a má v rámci jazyka fungujúce riešenie.
 
Iný bežný problém je, že pamäť haldy nemôže byť znova použitá, kým nie je explicitne uvoľnená programátorom volaním <code>free()</code>. Výsledkom je, že ak programátor zabudne uvoľniť pamäť, ale ďalej ju alokuje, bude sa postupne spotreúvaťspotrebovávať viac a viac pamäte. Nazývame to ''[[memory leak]]''. Naopak, je možné uvoľniť pamäť príliš skoro a potom pokračovať v jej používaní. Pretože alokačný systém môže kedykoľvek znova použiť túto pamäť, výsledkom býva nepredvídateľné správanie. Tieto problémy adresujúriešia jazyky s [[garbage collection|automatickou garbage collection]].
 
Ďalším bežným problémom sú [[variadická funkcia|variadické funkcie]], ktoré berú premenlivý počet argumentov. Na rozdiel od funkcií s prototypom nie je kontrola argumentov variadických funkcií počas kompilácie vyžadovaná štandardom. Ak sa poskytne zlý dátový typ, výsledok je nepredvídateľný a často fatálny v dôsledku zničenia obsahu zásobníka. Variadické funkcie tiež obsluhujú konštantu nulového pointera neočakávaným spôsobom. Napríklad rodina funkcií [[printf]] poskytovaných štandardnou knižnicou, ktoré sa používajú na tvorbu formátovaného textového výstupu je nechvalne známa svojim variadickým rozhraním náchylným na chyby, ktoré sa spolieha na formátovací reťazec, aby špecifikoval počet a typ nasledujúcich argumentov. Typová kontrola variadických funkcií štandardnej knižnice je však vecou kvality implementácie a mnohé moderné kompilátory robia špeciálne kontroly printf volaní a produkujú varovania ak je zoznam argumentov nekonzistentný s formátovacím reťazcom. Treba poznamenať, že nie všetky volania printf je možné kontrolovať staticky (to je zložité keď samotný formátovací reťazec pochádza z ťažko vystopovateľného miesta), a iné variadické funkcie zvyčajne zostávajú nekontrolované.
Anonymný používateľ