Expert advice on C programming is hard to find. While much help is available for object-oriented programming languages, there's surprisingly little for the C language. With this hands-on guide, beginners and experienced C programmers alike will find guidance about design decisions, including how to apply them bit by bit to running code examples when building large-scale programs.
Christopher Preschern, a leading member of the design patterns community, answers questions such as how to structure C programs, cope with error handling, or design flexible interfaces. Whether you're looking for one particular pattern or an overview of design options for a specific topic, this book shows you how to implement hands-on design knowledge specifically for the C programming language.
You'll find design patterns for:
- Error handling
- Returning error information
- Memory management
- Returning data from C functions
- Data lifetime and ownership
- Flexible APIs
- Flexible iterator interfaces
- Organizing files in modular programs
- Escaping #ifdef Hell
Author(s): Christopher Preschern
Edition: 1
Publisher: O'Reilly Media
Year: 2022
Language: English
Commentary: The TOC links are broken. Replace all links having ".html" extensions with ".xhtml" in file 'OEBPS/toc01.html'
Pages: 308
City: Sebastopol, CA
Tags: C Programming Language; C Language; Design Patterns; Software Development; Error Handling; Memory Management
Preface
Why I Wrote This Book
Patterns Basics
How to Read This Book
Overview of the Patterns
Conventions Used in This Book
Using Code Examples
O’Reilly Online Learning
How to Contact Us
Acknowledgments
I. C Patterns
1. Error Handling
Running Example
Function Split
Guard Clause
Samurai Principle
Goto Error Handling
Cleanup Record
Object-Based Error Handling
Summary
Further Reading
Outlook
2. Returning Error Information
Running Example
Return Status Codes
Return Relevant Errors
Special Return Values
Log Errors
Summary
Further Reading
Outlook
3. Memory Management
Data Storage and Problems with Dynamic Memory
Running Example
Stack First
Eternal Memory
Lazy Cleanup
Dedicated Ownership
Allocation Wrapper
Pointer Check
Memory Pool
Summary
Further Reading
Outlook
4. Returning Data from C Functions
Running Example
Return Value
Out-Parameters
Aggregate Instance
Immutable Instance
Caller-Owned Buffer
Callee Allocates
Summary
Outlook
5. Data Lifetime and Ownership
Stateless Software-Module
Software-Module with Global State
Caller-Owned Instance
Shared Instance
Summary
Further Reading
Outlook
6. Flexible APIs
Header Files
Handle
Dynamic Interface
Function Control
Summary
Further Reading
Outlook
7. Flexible Iterator Interfaces
Running Example
Index Access
Cursor Iterator
Callback Iterator
Summary
Further Reading
Outlook
8. Organizing Files in Modular Programs
Running Example
Include Guard
Software-Module Directories
Global Include Directory
Self-Contained Component
API Copy
Summary
Outlook
9. Escaping #ifdef Hell
Running Example
Avoid Variants
Isolated Primitives
Atomic Primitives
Abstraction Layer
Split Variant Implementations
Summary
Further Reading
Outlook
II. Pattern Stories
10. Implementing Logging Functionality
The Pattern Story
File Organization
Central Logging Function
Logging Source Filter
Conditional Logging
Multiple Logging Destinations
File Logging
Cross-Platform Files
Using the Logger
Summary
11. Building a User Management System
The Pattern Story
Data Organization
File Organization
Authentication: Error Handling
Authentication: Error Logging
Adding Users: Error Handling
Iterating
Using the User Management System
Summary
12. Conclusion
What You’ve Learned
Further Reading
Closing Remarks
Index
About the Author