W potrzasku jezyka C.pdf
(
320 KB
)
Pobierz
C:\Andrzej\PDF\ABC nagrywania p³yt CD\1 strona.cdr
IDZ DO
PRZYK£ADOW
Y ROZDZIA£
W potrzasku
SPIS TRECI
jêzyka C
KATALOG KSI¥¯EK
Autor: Andrew Koenig
T³umaczenie: Przemys³aw Szeremiota
ISBN: 83-7361-727-2
Tytu³ orygina³
u:
C Traps and Pitfalls
Format: B5, stron: 152
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Ka¿dy, nawet najbardziej dowiadczony programista, pope³nia b³êdy podczas pracy.
Niektóre z nich wynikaj¹ z popiechu, inne — z u¿ycia niew³aciwych konstrukcji,
operatorów lub typów. Wiêkszoæ z nich mo¿na wykryæ i usun¹æ po kilku minutach
uwa¿nej lektury kodu. Zdarzaj¹ siê jednak i takie b³êdy, których odnalezienie
i skorygowanie zajmuje kilka dni. B³êdy te s¹ z regu³y ³atwe do unikniêcia,
jeli zrozumie siê przyczyny ich powstawania.
Ksi¹¿ka „W potrzasku C” zawiera omówienie najczêciej spotykanych b³êdów
i przyczyn ich powstawania. Nie zawiera ogólników - jej atutem s¹ konkretne,
zaczerpniête z praktyki, przyk³ady. Ka¿dy programista prêdzej czy póniej natknie siê
na jeden z prezentowanych w ksi¹¿ce b³êdów i, dziêki zawartym w niej wiadomociom,
bêdzie w stanie usun¹æ go i unikn¹æ w póniejszej pracy.
• B³êdy leksykalne i sk³adniowe
• Przepe³nienie zakresu
• Problemy z konsolidacj¹
• W³aciwe stosowanie funkcji bibliotecznych
• Makrodefinicje
• Przenonoæ kodu
Nie traæ czasu na usuwanie b³êdów — dowiedz siê co robiæ, ¿eby w ogóle nie
wystêpowa³y.
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWOCIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK 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ł 1. Pułapki leksykalne...........................................................................15
1.1. Porównanie a przypisanie......................................................................................... 16
1.2. & i | to nie to samo co && i ||................................................................................... 17
1.3. Zachłanno analizatora leksykalnego...................................................................... 18
1.4. Literały stałych całkowitych..................................................................................... 19
1.5. Ci(gi a znaki............................................................................................................. 20
Rozdział 2. Pułapki składniowe..........................................................................23
2.1. Deklaracje funkcji .................................................................................................... 23
2.2. Priorytety operatorów............................................................................................... 26
2.3. Uwaga na redniki!................................................................................................... 30
2.4. Instrukcja wyboru switch.......................................................................................... 32
2.5. Wywołania funkcji ................................................................................................... 33
2.6. Klauzula else w zagnie5d5onych instrukcjach if ...................................................... 34
Rozdział 3. Pułapki semantyczne.......................................................................37
3.1. Wska6niki i tablice................................................................................................... 37
3.2. Wska6niki nie s( tablicami....................................................................................... 42
3.3. Deklaracje tablic w roli parametrów......................................................................... 43
3.4. Niebezpieczne synekdochy....................................................................................... 45
3.5. Wska6niki puste a ci(gi niepuste.............................................................................. 46
3.6. Zliczanie a asymetryczne granice zakresów............................................................. 46
3.7. Kolejno obliczania w wyra5eniu........................................................................... 55
3.8. Operatory &&, || i !................................................................................................... 57
3.9. Przepełnienie zakresu liczby całkowitej................................................................... 58
3.10. Zwracanie wartoci przez funkcj: main ................................................................... 59
Rozdział 4. Konsolidacja....................................................................................63
4.1. Czym jest konsolidator? ........................................................................................... 63
4.2. Deklaracje a definicje............................................................................................... 65
4.3. Kolizje nazw i słowo static....................................................................................... 66
4.4. Argumenty, parametry i wartoci funkcji................................................................. 67
4.5. Kontrola typów obiektów zewn:trznych .................................................................. 72
4.6. Pliki nagłówkowe..................................................................................................... 75
6
W potrzasku jzyka C
Rozdział 5. Funkcje biblioteczne........................................................................77
5.1. Funkcja getchar zwraca warto typu int.................................................................. 78
5.2. Aktualizacja pliku sekwencyjnego ........................................................................... 78
5.3. Buforowanie wyjcia i przydział pami:ci................................................................. 80
5.4. Diagnostyka bł:dów funkcj( errno........................................................................... 81
5.5. Funkcja signal .......................................................................................................... 82
Rozdział 6. Preprocesor.....................................................................................85
6.1. Odst:py w makrodefinicjach.................................................................................... 86
6.2. Makrodefinicje a funkcje.......................................................................................... 86
6.3. Makrodefinicje a instrukcje...................................................................................... 90
6.4. Makrodefinicje a definicje typów............................................................................. 91
Rozdział 7. Kwestie przeno&no&ci ......................................................................93
7.1. W obliczu zmian....................................................................................................... 94
7.2. Co z nazwami? ......................................................................................................... 95
7.3. Rozmiar liczby całkowitej........................................................................................ 96
7.4. Czy znaki maj( znaki?.............................................................................................. 97
7.5. Operatory przesuni: bitowych................................................................................ 98
7.6. Zerowa komórka pami:ci......................................................................................... 99
7.7. Obcinanie przy dzieleniu........................................................................................ 100
7.8. Rozmiar liczby losowej.......................................................................................... 101
7.9. Zamiana wielkoci liter .......................................................................................... 102
7.10. Najpierw zwalnia, potem przydziela ponownie?................................................. 103
7.11. Przykładowe problemy nieprzenonoci ................................................................ 104
Rozdział 8. Porady i odpowiedzi do (wicze)......................................................109
8.1. Porady .................................................................................................................... 110
8.2. Odpowiedzi do wiczeA ......................................................................................... 113
Dodatek A Funkcja printf i zmienne listy argumentów......................................129
A.1. Rodzina funkcji printf............................................................................................ 129
A.1.1. Proste specyfikatory formatu........................................................................ 131
A.1.2. Modyfikatory................................................................................................ 135
A.1.3. Znaczniki...................................................................................................... 138
A.1.4. Zmienna precyzja i szeroko pola............................................................... 140
A.1.5. Neologizmy.................................................................................................. 141
A.1.6. Anachronizmy.............................................................................................. 141
A.2. Zmienne listy argumentów — varargs.h................................................................ 142
A.2.1. Implementacja varargs.h............................................................................... 146
A.3. Zmienne listy argumentów w wydaniu ANSI — stdarg.h..................................... 147
Skorowidz......................................................................................149
Rozdział 1.
Pułapki leksykalne
Czytajc zdanie, nie zastanawiamy si nad znaczeniem poszczególnych liter, tworzcych
kolejne słowa. Litery same w sobie nios bowiem niewiele treci; grupujemy je wic
w słowa 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 znaków, czyli w pewnym kontekcie. Dlatego w wierszu
kodu:
oba wystpienia znaku
znacz zupełnie co innego. Mówic precyzyjniej, oba znaki wy-
stpuj w ró(nych elementach leksykalnych: pierwszy jest czci symbolu
, drugi
czci cigu znaków. Dalej, znaczenie elementu leksykalnego
jest całkowicie ró(ne
od znaczenia jego poszczególnych znaków.
Pojcie symbolu czy te( elementu leksykalnego odnosi si do jednostki programu, która
odgrywa w nim mniej wicej tak rol jak słowo w zdaniu — element leksykalny ma
podobne znaczenie wszdzie, gdzie wystpuje. Identyczna sekwencja znaków mo(e
w jednym kontekcie nale(e# do jednego elementu leksykalnego, a w innym — do
zupełnie innego. Mechanizm kompilatora, który jest odpowiedzialny za podział tekstu
programu na elementy leksykalne, nosi czsto nazw analizatora leksykalnego.
Rozwa(my nastpujc instrukcj:
. Nastpnym jest znak otwierajcy
nawias, dalej mamy identyfikator
, symbol relacji wikszoci, identyfikator
itd.
W jzyku C pomidzy elementy leksykalne mo(emy wstawia# dowoln liczb znaków
odstpów (spacji, tabulatorów i znaków nowego wiersza), wic instrukcj t moglibymy
zapisa# równie( tak:
Pierwszym elementem tej instrukcji jest słowo
16
W potrzasku jzyka C
W niniejszym rozdziale zajmiemy si szczegółowo niektórymi najczciej popełnianymi
błdami wynikajcymi z niezrozumienia znaczenia elementów leksykalnych i zale(-
noci pomidzy nimi a tworzcymi je znakami.
1.1. Porównanie a przypisanie
, a porówna-
nia — znakami
. W jzyku C przypisanie reprezentuje znak
, a porównanie — znaki
. Poniewa( w programie czciej wystpuj przypisania ni( porównania, taka repre-
zentacja jest bardzo wygodna dla programisty, bo dla operacji czstszej stosuje krótszy
zapis. Co wicej, w jzyku C przypisanie jest operatorem, co umo(liwia składanie
wielu operacji przypisania w jednym wyra(eniu.
Wygoda ta jest jednak 2ródłem wielu błdów wynikajcych z omyłkowego zapisania
operatora przypisania w miejscu, gdzie powinien znajdowa# si operator porównania;
jak w poni(szej instrukcji warunkowej, która powinna wykonywa# instrukcj
,
kiedy
jest równe
:
W rzeczywistoci instrukcja ta przypisuje do
warto#
, a potem sprawdza, czy wyni-
kiem operacji przypisania jest warto# niezerowa. Nastpnym przykładem mo(e by#
ptla, która miała pomija# w pliku znaki odstpów (spacji, tabulacji i nowego wiersza):
W ptli tej w pierwszym porównaniu znaku
zamiast
zapisano
. Poniewa( operator
przypisania ma priorytet ni(szy od operatora
, „porównanie” w rzeczywistoci po-
woduje przypisanie do
wartoci wyra(enia:
niezale(nie od
pierwotnej wartoci
. Dlatego ptla spowoduje „przewinicie” całego pliku. Co sta-
nie si po wyczerpaniu znaków pliku, zale(y od tego, czy implementacja jzyka po-
zwala na kontynuowanie odczytu po osigniciu ko5ca pliku. Jeli tak, program wejdzie
w ptl niesko5czon.
jest ró(na od zera, całe wyra(enie ma warto#
W wikszoci jzyków programowania wywodzcych si z jzyka Algol, na przykład
w Pascalu czy Adzie, operacja przypisania reprezentowana jest znakami
Poniewa( warto#
Plik z chomika:
sianowo1
Inne pliki z tego folderu:
Asembler dla procesorow Intel Vademecum profesjonalisty.pdf
(400 KB)
Asembler cwiczenia praktyczne.pdf
(358 KB)
Architektura systemow zarzadzania przedsiebiorstwem Wzorce projektowe.pdf
(829 KB)
Architektura oprogramowania Metody oceny oraz analiza przypadkow.pdf
(429 KB)
Aplikacje w Visual C++ 2005 Przyklady.pdf
(296 KB)
Inne foldery tego chomika:
! Airport Simulator [PL]
!!!!!!!!!!!!!!!!!!!
!!!A TUNING, CHIPTUNING
&WINDOWS 7 ULTIMATE X86 X64 ISO PLx 64 x 86 iso
+++++++++++++++++++++++++
Zgłoś jeśli
naruszono regulamin