Download Learning GNU C - Non-GNU

Transcript
v
11
Variable Length Arguments . . . . . . . . . . . . . . . . . 40
11.1
12
Tricks with Functions . . . . . . . . . . . . . . . . . . . . . . . . 41
12.1
12.2
12.3
12.4
12.5
13
What are Variable Length Arguments? . . . . . . . . . . . . . . . . . . . . . . . 40
What are Virtual Functions? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
virtual function.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nesting functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Benefits of Nested Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Declaring and Defining Nested Functions . . . . . . . . . . . . . . . . . . . . .
simple nested function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Taking Command Line Arguments . . . . . . . . . 43
13.1
How does C handle command line arguments? . . . . . . . . . . . . . . . .
list args.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2 Argp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
simple argp.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3 Using More of the Argp Functionality . . . . . . . . . . . . . . . . . . . . . . . .
better argp.c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.4 Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
What are Libraries? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stages of Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Writing a library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dynamic or Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
46
46
46
46
Writing Good Code . . . . . . . . . . . . . . . . . . . . . . . . . . 47
15.1
16
43
43
43
43
43
44
45
Using and Writing Libraries. . . . . . . . . . . . . . . . . 46
14.1
14.2
14.3
14.4
14.5
15
41
41
41
41
41
41
42
Readability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
16.1
16.2
16.3
16.4
About Optimising. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What are function attributes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Function Attribute Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What are pure and const? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Appendix A
A.0.1
A.0.2
A.0.3
A.0.4
A.0.5
A.0.6
48
48
48
48
Who defines Valid C? . . . . . . . . . . . . 49
K&R C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISO C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GNU C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Choosing a Dialect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Future Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
49
49
49
49
50