Preface
Part I.The Environment
1.SetYourself Up for Easy Compilation
Use a Package Manager
Compiling C with Windows
POSIX for Windows
Compiling C with POSIX
Compiling C Without POSIX
Which Way to the Library?
A Few of My Favorite Flags
Paths
Runtime Linking
Using Makefiles
Setting Variables
The Rules
Using Libraries from Source
Using Libraries from Source(Even if Your Sysadmin Doesn’tWant You To)
Compiling C Programs via Here Document
Include Header Files from the Command Line
The Unified Header
Here Documents
Compiling from stdin
2.Debug,Test,Document
Using a Debugger
GDB Variables
Print Your Structures
Using Valgrind to Check for Errors
Unit Testing
Using a Program as a Library
Coverage
Interweaving Documentation
Doxygen
Literate Code with CW’EB
Error Checking
What Is the User’s Involvement in the Error?
The Context in Which the User Is Working
How Should the Error Indication Be Returned?
3.PackagingYourProject
The Shell
Replacing Shell Commands with Their Outputs
Use the Shell’s for Loops to Operate on a Set of Files
TestforFiles
fc
Makefiles VS.Shell Scripts
Packaging Your Code with Autotools
An Autotools Demo
Describing the Makefile with makefile.a(chǎn)m
The configure Script
4.VersionControI
Changes via diff
Git’s Objects
The Stash
Trees and Their Branches
Merging
The Rebase
Remote Repositories
5.PlayingNicewithOthers
The Process
Writing to Be Read by Nonnatives
The Wrapper Function
Smuggling Data Structures Across the Border
Linking
Python Host
Compiling and Linking
The Conditional Subdirectory for Automake
Distutils Backed with Autotools
Part II.The Language
6.YOurPaIthePointer
Automatic,Static,and Manual Memory
Persistent State Variables
Pointers Without malloc
Structures Get Copied,Arrays Get Aliased
malloc and Memory—Twiddling
The Fault Is in Our Stars
All the Pointer Arithmetic You Need to Know
7.CSyntaxYouCanIgnore
Don’t Bother Explicitly Returning from main
Let Declarations Flow
Set Array Size at Runtime
Cast Less
Enums and Strings
Labels,gotos,switches,and breaks
gotO Considered
switch
Deprecate Float
8.Obstaclesand Oppounity
Cultivate Robust and Flourishing Macros
Preprocessor Tricks
Linkage with static and extem
Declare Externally Linked Elements Only in HeaderFiles
The const Keyword
Noun—Adjective Form
Tension
Depth
The char const Issue
9.Text
Making String Handling Less Painful with asprintf
Security
Constant Strings
Extending Strings with asprintf
APean to strtok
Unicode
The Encoding for C Code
Unicode Libraries
The Sample Code
10.Better Structures
Compound Literals
Initialization via Compound Literals
Variadic Macros
Safely Terminated Lists
Foreach
Vectorize a Function
Designated Initializers
Initialize Arrays and Structs with Zeros
Typedefs Save the Day
A StyleNote
Return Multiple Items from a Function
Reporting Errors
Flexible Function Inputs
Declare Your Function.a(chǎn)s printf-Style
Optional and Named Arguments
Polishing a Dull Function
The Void Pointer and the Structures It Points To
Functions with Generic Inputs
Generic Structures
11.Object-Oriented Programmingin C
What You Don’t Get(and Why You Won’t Miss It)
Scope
Overloaded with Operator Overloading
Extending Structures and Dictionaries
Extending a Structure
Implementing a Dictionary
Base Your Code on Pointers to Objects
Functions in Your Structs
Count References,
Example:A Substring Object
An Agent—Based Model of Group Formation
12.Libraries
GLib
POS.IX
Using mmap for Gigantic Data Sets
Easy Threading with Pthreads
The GNU Scientific Library
SQLite
The Queries
libxml and cURL
Epilogue
Glossary
Bibliography
Index