0 Introduction 1
1 Lexical pitfalls 5
1.1 =is not== 6
1.2 &and|are not&&or|| 7
1.3 Greedy lexical analysis 7
1.4 Integer constants 9
1.5 Strings and characters 10
2 Syntactic pitfalls 13
2.1 Understanding function declarations 13
2.2 Operators don't always have the precedence you want 17
2.3 Watch those semicolons! 20
2.4 The switch statement 22
2.5 Calling functions 24
2.6 The dangling else problem 24
3 Semantic pitfalls 27
3.1 Pointers and arrays 27
3.2 Pointers are not arrays 32
3.3 Array declarations as parameters 33
3.4 Eschew synecdoche 34
3.5 Null pointers are not null strings 35
3.6 Counting and asymmetric bounds 36
3.7 Order of evaluation 46
3.8 The&&,||,and!operators 48
3.9 Integer overflow 49
3.10 Returning a value from main 50
4 Linkage 53
4.1 What is a linker? 53
4.2 Declarations vs.definitions 54
4.3 Name conflicts and the static modifier 56
4.4 Arguments,parameters,and return values 57
4.5 Checking external types 63
4.6 Header files 66
5 Library functions 69
5.1 getchar returns an integer 70
5.2 Updating a sequential file 70
5.3 Buffered output and memory allocation 72
5.4 Using errno for error detection 73
5.5 The signal function 74
6 The preprocessor 77
6.1 Spaces matter in macro definitions 77
6.2 Macros are not functions 78
6.3 Macros are not statements 82
6.4 Macros are not type definitions 83
7 Portability pitfalls 85
7.1 Coping with change 85
7.2 Whats in a name? 87
7.3 How big is an integer? 88
7.4 Are characters signed or unsigned? 89
7.5 Shift operators 90
7.6 Memory location zero 91
7.7 How does division truncate? 92
7.8 How big is a random number? 93
7.9 Case conversion 93
7.10 Free first,then reallocate? 95
7.11 An example of portability problems 96
8 Advice and answers 101
8.1 Advice 102
8.2 Answers 105
Appendix:printf,varargs,and stdarg 121
A.1 The printf family 121
Simple format types 123
Modifiers 127
Flags 130
Variable field width and precision 132
Neologisms 133
Anachronisms 133
A.2 Variable argument lists with varargs.h 134
Implementing varargs.h 138
A.3 stdarg.h:the ANSI varargs.h 139