Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
W potrzasku
jzyka C
Autor: Andrew Koenig
Tumaczenie: Przemysaw Szeremiota
ISBN: 83-7361-727-2
Tytu oryginau: C Traps and Pitfalls
Format: B5, stron: 152
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
.
Wstp ............................................................................................... 7
Wprowadzenie ................................................................................. 11
Rozdzia 4. Konsolidacja.................................................................................... 63
4.1. Czym jest konsolidator? ........................................................................................... 63
4.2. Deklaracje a definicje ............................................................................................... 65
4.3. Kolizje nazw i sowo static....................................................................................... 66
4.4. Argumenty, parametry i wartoci funkcji ................................................................. 67
4.5. Kontrola typw obiektw zewntrznych .................................................................. 72
4.6. Pliki nagwkowe ..................................................................................................... 75
W potrzasku jzyka C
Skorowidz...................................................................................... 149
Rozdzia 1.
Puapki leksykalne
Czytajc zdanie, nie zastanawiamy si nad znaczeniem poszczeglnych liter, tworzcych
kolejne sowa. Litery same w sobie nios bowiem niewiele treci; grupujemy je wic
w sowa i im przypisujemy znaczenie.
Podobnie jest z programami w jzyku C i innych jzykach programowania. Pojedyncze
znaki programu nie znacz prawie nic, jeli rozpatrywa je osobno; znaczenia nabieraj
dopiero w otoczeniu innych znakw, czyli w pewnym kontekcie. Dlatego w wierszu
kodu:
oba wystpienia znaku znacz zupenie co innego. Mwic precyzyjniej, oba znaki wystpuj w rnych elementach leksykalnych: pierwszy jest czci symbolu , drugi
czci cigu znakw. Dalej, znaczenie elementu leksykalnego jest cakowicie rne
od znaczenia jego poszczeglnych znakw.
Pojcie symbolu czy te elementu leksykalnego odnosi si do jednostki programu, ktra
odgrywa w nim mniej wicej tak rol jak sowo w zdaniu element leksykalny ma
podobne znaczenie wszdzie, gdzie wystpuje. Identyczna sekwencja znakw moe
w jednym kontekcie nalee do jednego elementu leksykalnego, a w innym do
zupenie innego. Mechanizm kompilatora, ktry jest odpowiedzialny za podzia tekstu
programu na elementy leksykalne, nosi czsto nazw analizatora leksykalnego.
Rozwamy nastpujc instrukcj:
Pierwszym elementem tej instrukcji jest sowo . Nastpnym jest znak otwierajcy
nawias, dalej mamy identyfikator , symbol relacji wikszoci, identyfikator itd.
W jzyku C pomidzy elementy leksykalne moemy wstawia dowoln liczb znakw
odstpw (spacji, tabulatorw i znakw nowego wiersza), wic instrukcj t moglibymy
zapisa rwnie tak:
16
W potrzasku jzyka C
W rzeczywistoci instrukcja ta przypisuje do warto , a potem sprawdza, czy wynikiem operacji przypisania jest warto niezerowa. Nastpnym przykadem moe by
ptla, ktra miaa pomija w pliku znaki odstpw (spacji, tabulacji i nowego wiersza):
17
napisa:
To upewni kompilator (i innych programistw) co do zamierze programisty. Przyczyna koniecznoci ujcia przypisania
w nawiasy zostaa omwiona w podrozdziale 2.2.
Czste s rwnie pomyki odwrotne, jak poniej:
!"#
Funkcja zastosowana w tym przykadzie zwraca , jeli wykryje bd otwarcia
pliku, oraz zero albo warto dodatni, kiedy operacja zakoczy si pomylnie. Powysza instrukcja ma wic zapisa wynik operacji otwarcia pliku w zmiennej
18
W potrzasku jzyka C
nigdy za:
19
jako:
+
jako:
$%
20
W potrzasku jzyka C
zamiast:
21
wiczenie 1.1
Niektre z kompilatorw jzyka C pozwalaj na stosowanie komentarzy zagniedonych. Napisz program w jzyku C, ktry potrafi wykry, za pomoc ktrego z kompilatorw zosta skompilowany, nie prowokujc przy tym adnych bdw kompilacji.
Innymi sowy, kod programu powinien by poprawny dla obu regu interpretacji komentarzy, ale dziaa rnie dla rnych interpretacji. Wskazwka: symbol komentarza
wewntrz cigu znakw jest interpretowany jako fragment cigu znakw; znaki $$
wewntrz komentarza to cz komentarza.
wiczenie 1.2
Gdyby pisa kompilator jzyka C, czy pozwoliby jego uytkownikom na zagniedanie komentarzy? Gdyby dysponowa kompilatorem dajcym moliwo zagniedania
komentarzy, czy korzystaby z tej moliwoci? Czy odpowied na drugie z tych pyta
wpywa na odpowied na pytanie pierwsze?
wiczenie 1.3
Dlaczego oznacza
, a nie
?
wiczenie 1.4
Co oznacza zapis ?