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