1. Overview of C- Operating System Independence
- Design Goals and Capabilities
- Flavors of C
| 2. Fundamental Data Types, Storage Classes, and Scope- Fundamental Data Types and Qualifiers
- Constants and Strings
- Storage Classes
- Scope and Block Structure
- Scope and Data Hiding
- Data Initialization
|
3. Macros- Macros
- Functions versus Inlining
- Purpose of Macros
- Use of Macros
- Making Code More Readable
- Auto Adjustment of Compile Time Values
- Conditional Compilation
- Making Code Portable
- Simplifying Complex Access Calculations
- Advanced Micro Design Tips
- Using Macros to Help Write Portable Programs
- When to Use a Macro instead of a Function
- Using Macros for Debugging
| 4. Basic Formatted I/O- Standard I/O Library
- Character Set Encoding
- Standard Input and Output
- Character I/O Functions
- Formatted I/O Functions
- String Constants
|
5. Operators and Expressions- Arithmetic, Logical, and Bit Operators
- Precedence and Associativity
- Assignment and Casting
- The Conditional Operator
| 6. Functions (Subroutines)- Purpose of Functions
- Functions versus Inlining
- Automatic Variables
- The Argument Stack
- Passing By Value
- Passing By Reference
- Declaring External Functions
- Function Prototyping
- ANSI Prototyping
- The _NO_PROTO Compiler Symbol
- Varargs Functions
- Passing a Function as an Argument
- Designing Functions for Reusability
- Calling a Function from Another Language
- Returning a Dynamically Allocated Value Using Double Indirection
- Casting the Return Value of a Function
- Recursion and Reentrancy
|
7. Advanced Structures and Unions- Nested Structures
- Arrays of Structures
- Bit Fields
- Unions
- Linked Lists
| 8. Strings and Character Manipulation- Strings as Character Arrays
- String Library Functions
- Reading and Writing Strings
|
9. Structured Programming- Structuring Code for Quality, Reliability, Maintainability
- Designing for Modularity and Reusability
| 10. Compiler Directives and the C Preprocessor- Compile-Time Directives
- Use of typedef
- C Preprocessor Syntax
|
11. Pointers and Dynamic Allocation- Advantages of Pointers
- User of Pointers
- Pointer and Address Arithmetic
- Dynamic Storage Allocation
- sizeof
- Double Indirection
| 12. Arrays- Purpose of Arrays
- Declaring an Array
- Initializing an Array
- Addressing Elements
- Stepping Through an Array
- Variable Size Arrays
- Arrays of Pointers
- Arrays of Strings
- Passing an Array to a Function
- Dynamic Memory Allocation
- Multidimensional Arrays
|
13. Program Debugging- Problem Analysis
- Instrumenting with printif
- Instrumenting with ctrace
- The Purpose of Debuggers
- How Not to Use Debuggers
- Symbolic Debuggers
| 14. Flow Control Constructs- Conditional Constructs: if, switch
- Looping Constructs: while, do, for
- Programming Style
|
15. Structures- Purpose of Structures
- Defining and Declaring Structures
- Accessing Members
- Pointers to Structures
- Dynamic Memory Allocation
- Passing a Structure to a Function
- As a Pointer
- Passing the Actual Structure
| 16. C Runtime Library Standard Functions- Character I/O
- Unformatted File I/O
- Formatted File I/O
- Math Functions
- Miscellaneous Functions
|
17. Accessing Command Line Arguments and Environment Symbols- argc and argv
- Parsing Command Line Options
- Accessing the Environment Array
| 18. Advanced Programming Consideration- Writing Portable Code
- Use of Macros
- ANSI C Limits
- Feature Test Macros
- Client/Server Design
- Performance Considerations
|