Fontosabb hibák a Kernighan & Ritchie könyv magyar fordításában

Utolsó módosítás: 2009. február 26.

A C nyelvet nagyon jól írja le Kernighan – Richie A C programozási nyelv című könyve (Műszaki Kiadó, második kiadás), ezért az info 2 tárgy elsajátításához mindenképpen ajánlom. Sajnos az eredeti angol nyelvű könyv (eredeti címe The C Programming Language) nehezebben megszerezhető, mint a magyar fordítás, és a magyar fordításban maradt néhány hiba (nyilván a kézi szedés miatt). Ezen az oldalon ezért röviden felsorolom az értelmet leginkább zavaró hibákat, amiket a könyvben találtam. Én csak a 2003-as és 2004-es kék borítójú kiadásokat néztem, lehetséges, hogy a hibák nagy részét a 2006-os, fehér borítójú változatban már kijavították.

32. oldal.
A szöveggel ellentétben a long típusú egészek legalább 32 bitet tárolnak.

51. oldal.
(Csak a 2003-as kiadásban) „OXFUL” helyett „0XFUL” kéne.

55. oldal.
Csak a 2003-as kiadásban a „==” jel közepén egy szóköz van, aminek nem szabadna ott lennie.

63. oldal.
A „~” operátort három példa helytelenül bináris operátorként használja, mégpedig „x = x ~ 077”, „x ~ 077”, illetve „x ~ 0177700”. (Az első csak a 2003-as kiadásban hibás.) Az angol eredetiben ezek helyesen szerepelnek: „x = x & ~077”, „x & ~077”, illetve „x & 0177700”. (Az utolsóban nem is szerepel a „~” művelet.) Ráadásul a két utóbbi kifejezést összehasonlító mondat értelme is megfordult, valójában azt kéne állítania, hogy az „x & ~077” írásmód előnyösebb az „x & 0177700” műveletnél, mivel bármilyen gépi szóhossz esetén ugyanúgy csak az utolsó hat bitet kapcsolja ki.

67. oldal.
A 2004-es kiadásban a táblázat két helyen is hibás: a „->” és „.” operátorok közül hiányzik az elválasztó szóköz, a „,” operátort pedig a táblázat következő sorába kéne rakni. A 2003-as kiadásban még rosszabb a helyzet: itt mind a „.”, mind a „,” operátor hiányzik a táblázatból.

73. oldal.
Szerintem nincs értelme azt mondani, hogy a switch belsejében használt break utasítás hatására a vezérlés abbahagyja a további „vizsgálatokat”, mivel ekkor már a switch utasítás nem végezne újabb összehasonlításokat a case címkékkel.

79. oldal.
Szerintem nem érthető az az állítás, hogy a continue utasítás hatására a „for esetén pedig a ciklusváltozó újrainicializálódik”, mivel a continue futása után nem a for utasítás első, inicializáló kifejezésére ugrik a program futása, hanem a harmadik, léptető kifejezésre. Ugyanitt a continue működését bemutató példaprogramban a 2003-as kiadásban hiányzik egy pontosvessző a kódból a „continue” után.

181. oldal.
Az fgets függvényt implementáló kódban „*cs = '\n';” helyett „*cs = '\0';” kéne, a kód így hibás.

215. oldal.
Az aritmetikai konverziókat megadó szabályoknál abban az esetben, amikor az egyik argumentum long int, a másik pedig unsigned int típusú, a nyelv viselkedése attól függ, hogy minden unsigned int típusú érték ábrázolható-e long int típusú értékkel. A könyvben szereplő mondat nem fejezi ki ezt világosan.

Remélem, hogy a könyvkiadó előbb vagy utóbb az interneten nyilvánosságra hoz egy pontosabb és teljesebb hibajegyzéket.