Level 0. Encounter
1. Getting started
1.1. Imperative programming
1.2. Compiling and running
2. The principal structure of a program
2.1. Grammar
2.2. Declarations
2.3. Definitions
2.4. Statements
Level 1. Acquaintance
Warning to experienced C programmers
3. Everything is about control
3.1. Conditional execution
3.2. Iterations
3.3. Multiple selection
4. Expressing computations
4.1. Arithmetic
4.2. Operators that modify objects
4.3. Boolean context
4.4. The ternary or conditional operator
4.5. Evaluation order
5. Basic values and data
5.1. Basic types
5.2. Specifying values
5.3. Initializers
5.4. Named constants
5.5. Binary representions
6. Aggregate data types
6.1. Arrays
6.2. Pointers as opaque types
6.3. Structures
6.4. New names for types: typedef
7. Functions
7.1. Simple functions
7.2. main is special
7.3. Recursion
8. C Library functions
8.1. Mathematics
8.2. Input, output and file manipulation
8.3. String processing and conversion
8.4. Time
8.5. Runtime environment settings
8.6. Program termination and assertions
Level 2. Cognition
9. Style
9.1. Formatting
9.2. Naming
10. Organization and documentation
10.1. Interface documentation
10.2. Implementation
10.3. Macros
10.4. Pure functions
11. Pointers
11.1. Address-of and object-of operators
11.2. Pointer arithmetic
11.3. Pointers and structs
11.4. Opaque structures
11.5. Array and pointer access are the same
11.6. Array and pointer parameters are the same
11.7. Null pointers
11.8. Function pointers
12. The C memory model
12.1. A uniform memory model
12.2. Unions
12.3. Memory and state
12.4. Pointers to unspecific objects
12.5. Implicit and explicit conversions
12.6. Effective Type
12.7. Alignment
13. Allocation, initialization and destruction
13.1. malloc and friends
13.2. Storage duration, lifetime and visibility
13.3. Initialization
13.4. Digression: a machine model
14. More involved use of the C library
14.1. Text processing
14.2. Formatted input
14.3. Extended character sets
14.4. Binary files
15. Error checking and cleanup
Level 3. Experience
16. Performance
Safety first
Optimizers are good enough
Help the compiler
16.1. Inline functions
16.2. Avoid aliasing: restrict qualifiers
16.3. Measurement and inspection
17. Functionlike macros
17.1. how does it work
17.2. Argument checking
17.3. Accessing the calling context
17.4. Variable length argument lists
17.5. Type generic programming
18. Variations in Control Flow
18.1. Sequencing
18.2. Short jumps
18.3. Functions
18.4. Long jumps
18.5. Signal handlers
19. Threads
19.1. Simple inter-thread control
19.2. Thread local data
19.3. Critical data and critical sections
19.4. Communicating through condition variables
19.5. More sophisticated thread management
20. Atomic access and memory consistency
20.1. The ``happend before'' relation
20.2. Synchronizing C library calls
20.3. Sequential consistency
20.4. Other consistency models
Level 4. Ambition
21. The register overhaul
Overview
21.1. Introduce register storage class in file scope
21.2. Typed constants with register storage class and const qualification
21.3. Extend ICE to register constants
21.4. Functions
21.5. Unify designators
22. Improve type generic expression programming
22.1. Storage class for compound literals
22.2. Inferred types for variables and functions
22.3. Anonymous functions
23. Improve the C library
23.1. Make the presence of all C library headers mandatory
23.2. Add requirements for sequence points
23.3. Provide type generic interfaces for string functions
24. Modules
24.1. C needs a specific approach
24.2. All is about naming
24.3. Modular C features
25. Simplify the object and value models
25.1. Remove objects of temporary lifetime
25.2. Introduce comparison operator for object types
25.3. Make memcpy and memcmp consistent
25.4. Enforce representation consistency for _Atomic objects
25.5. Make string literals char const[]
25.6. Default initialize padding to 0
25.7. Make restrict qualification part of the function interface
25.8. References
26. Contexts
26.1. Introduce evaluation contexts in the standard
26.2. Convert object pointers to void* in unspecific context
26.3. Introduce nullptr as a generic null pointer constant and deprecate NULL
List of Rules
Listings
Bibliography
Index