Skip to content

Instantly share code, notes, and snippets.

@wayou
Created August 26, 2020 18:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wayou/fcea404b063b268e0975f92650714d96 to your computer and use it in GitHub Desktop.
Save wayou/fcea404b063b268e0975f92650714d96 to your computer and use it in GitHub Desktop.
Preface 6
Preface to the first edition 8
Chapter 1 - A Tutorial Introduction 9
1.1 Getting Started 9
1.2 Variables and Arithmetic Expressions 11
1.3 The for statement 15
1.4 Symbolic Constants 17
1.5 Character Input and Output 17
1.5.1 File Copying 18
1.5.2 Character Counting 19
1.5.3 Line Counting 20
1.5.4 Word Counting 21
1.6 Arrays 23
1.7 Functions 25
1.8 Arguments - Call by Value 28
1.9 Character Arrays 29
1.10 External Variables and Scope 31
Chapter 2 - Types, Operators and Expressions 35
2.1 Variable Names 35
2.2 Data Types and Sizes 35
2.3 Constants 36
2.4 Declarations 38
2.5 Arithmetic Operators 39
2.6 Relational and Logical Operators 39
2.7 Type Conversions 40
2.8 Increment and Decrement Operators 43
2.9 Bitwise Operators 45
2.10 Assignment Operators and Expressions 46
2.11 Conditional Expressions 47
2.12 Precedence and Order of Evaluation 48
Chapter 3 - Control Flow 50
3.1 Statements and Blocks 50
3.2 If-Else 50
3.3 Else-If 51
3.4 Switch 52
3.5 Loops - While and For 53
3.6 Loops - Do-While 56
3.7 Break and Continue 57
3.8 Goto and labels 57
Chapter 4 - Functions and Program Structure 59
4.1 Basics of Functions 59
4.2 Functions Returning Non-integers 61
4.3 External Variables 63
4.4 Scope Rules 68
4.5 Header Files 69
4.6 Static Variables 70
4.7 Register Variables 71
4.8 Block Structure 71
4.9 Initialization 72
4.10 Recursion 73
4.11 The C Preprocessor 74
4.11.1 File Inclusion 75
4.11.2 Macro Substitution 75
4.11.3 Conditional Inclusion 77
Chapter 5 - Pointers and Arrays 78
5.1 Pointers and Addresses 78
5.2 Pointers and Function Arguments 79
5.3 Pointers and Arrays 81
5.4 Address Arithmetic 84
5.5 Character Pointers and Functions 87
5.6 Pointer Arrays; Pointers to Pointers 89
5.7 Multi-dimensional Arrays 92
5.8 Initialization of Pointer Arrays 93
5.9 Pointers vs. Multi-dimensional Arrays 94
5.10 Command-line Arguments 95
5.11 Pointers to Functions 98
5.12 Complicated Declarations 100
Chapter 6 - Structures 105
6.1 Basics of Structures 105
6.2 Structures and Functions 107
6.3 Arrays of Structures 109
6.4 Pointers to Structures 112
6.5 Self-referential Structures 113
6.6 Table Lookup 117
6.7 Typedef 119
6.8 Unions 120
6.9 Bit-fields 121
Chapter 7 - Input and Output 124
7.1 Standard Input and Output 124
7.2 Formatted Output - printf 125
7.3 Variable-length Argument Lists 127
7.4 Formatted Input - Scanf 128
7.5 File Access 130
7.6 Error Handling - Stderr and Exit 132
7.7 Line Input and Output 134
7.8 Miscellaneous Functions 135
7.8.1 String Operations 135
7.8.2 Character Class Testing and Conversion 135
7.8.3 Ungetc 135
7.8.4 Command Execution 135
7.8.5 Storage Management 136
7.8.6 Mathematical Functions 136
7.8.7 Random Number generation 136
Chapter 8 - The UNIX System Interface 138
8.1 File Descriptors 138
8.2 Low Level I/O - Read and Write 139
8.3 Open, Creat, Close, Unlink 140
8.4 Random Access - Lseek 142
8.5 Example - An implementation of Fopen and Getc 142
8.6 Example - Listing Directories 145
8.7 Example - A Storage Allocator 149
Appendix A - Reference Manual 154
1 Introduction 154
2 Lexical Conventions 154
2.1 Tokens 154
2.2 Comments 154
2.3 Identifiers 154
2.4 Keywords 154
2.5 Constants 155
2.6 String Literals 156
3 Syntax Notation 156
4 Meaning of Identifiers 157
4.1 Storage Class 157
4.2 Basic Types 157
4.3 Derived types 158
4.4 Type Qualifiers 158
5 Objects and Lvalues 158
6 Conversions 159
6.1 Integral Promotion 159
6.2 Integral Conversions 159
6.3 Integer and Floating 159
6.4 Floating Types 159
6.5 Arithmetic Conversions 159
6.6 Pointers and Integers 160
6.7 Void 160
6.8 Pointers to Void 161
7 Expressions 161
7.1 Pointer Conversion 161
7.2 Primary Expressions 161
7.3 Postfix Expressions 162
7.4 Unary Operators 164
7.5 Casts 165
7.6 Multiplicative Operators 165
7.7 Additive Operators 166
7.8 Shift Operators 166
7.9 Relational Operators 167
7.10 Equality Operators 167
7.11 Bitwise AND Operator 167
7.12 Bitwise Exclusive OR Operator 167
7.13 Bitwise Inclusive OR Operator 168
7.14 Logical AND Operator 168
7.15 Logical OR Operator 168
7.16 Conditional Operator 168
7.17 Assignment Expressions 169
7.18 Comma Operator 169
7.19 Constant Expressions 169
8 Declarations 170
8.1 Storage Class Specifiers 170
8.2 Type Specifiers 171
8.3 Structure and Union Declarations 172
8.4 Enumerations 174
8.5 Declarators 175
8.6 Meaning of Declarators 176
8.7 Initialization 178
8.8 Type names 180
8.9 Typedef 181
8.10 Type Equivalence 181
9 Statements 181
9.1 Labeled Statements 182
9.2 Expression Statement 182
9.3 Compound Statement 182
9.4 Selection Statements 183
9.5 Iteration Statements 183
9.6 Jump statements 184
10 External Declarations 184
10.1 Function Definitions 185
10.2 External Declarations 186
11 Scope and Linkage 187
11.1 Lexical Scope 187
11.2 Linkage 187
12 Preprocessing 187
12.1 Trigraph Sequences 188
12.2 Line Splicing 188
12.3 Macro Definition and Expansion 188
12.4 File Inclusion 190
12.5 Conditional Compilation 191
12.6 Line Control 192
12.7 Error Generation 192
12.8 Pragmas 192
12.9 Null directive 192
12.10 Predefined names 192
13 Grammar 193
Appendix B - Standard Library 200
1 Input and Output: <stdio.h> 200
1.1 File Operations 200
1.2 Formatted Output 200
1.3 Formatted Input 202
1.4 Character Input and Output Functions 203
1.5 Direct Input and Output Functions 204
1.6 File Positioning Functions 204
1.7 Error Functions 206
2 Character Class Tests: <ctype.h></ctype.h> 206
3 String Functions: <string.h> 206
4 Mathematical Functions: <math.h> 207
5 Utility Functions: <stdlib.h> 208
6 Diagnostics: <assert.h> 210
7 Variable Argument Lists: <stdarg.h> 210
8 Non-local Jumps: <setjmp.h> 211
9 Signals: <signal.h> 211
10 Date and Time Functions: <time.h> 211
11 Implementation-defined Limits: <limits.h> and <float.h> 213
Appendix C - Summary of Changes 215
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment