( Caro | 2025. 03. 07., p – 20:50 )

Ennyire azért nem voltak hülyék az alkotók. Nagyon sok olyan undefined behaviour van, amit definiálhattak volna, de performance hit lett volna a következménye. Pl. integer aritmetikánál nincs definiálva a signed overflow, de az unsigned igen. Az indoklás: léteik egyes komplemens ábrázolás is.

De az összes string.h függvény is lyukra fut, ha NULL pointert kap, pedig ott is mekkora dolog lett volna beletenni csak egy NULL check-et (jó, ez library issue). Nem tettek. Tegye bele a programozó, ha nem tudja hogy mit ad át.

Ezek az undefined behaviour-ök nem azért kerültek a nyelvbe, hogy a fordító erre építsen optimalizálást, hanem arra hogy csak az az adott művelet hatékonyabban elvégezhető legyen. A printf-nek ilyenkor az lenne a tisztességes dolga, hogy szépen megpróbálja kiírni a 0x0-n lévő értéket, amire egy rendes gépen valóban segfault-ot kap (de azért vannak architektúrák, ahol a 0x0 az valid address).

Szóval ismét: ez nem "hibája" a C-nek, mert a C-t ilyenre tervezték. Annak a hibája, aki minden sz*rt C-ben akar megírni.

Egyébként régóta az a véleményem, hogy hiányzik az a nyelv, ami a C utódja lehetne, ami könnyen tanulható, kis eszközkészlet, de "biztonságos" és viszonylag még hatékony.