Bibliography: Extensions and Tools for the C Programming Language

maintained by Russ Cox

Ace, a syntax-driven preprocessor (Gosling)

Adding Run-Time Checking to the Portable C Compiler (Steffen).
Software—Practice and Experience, 22(4) (April 1992), pp. 305–316.

C++ adds everything but the kitchen sink (fixed in 3rd edition).
The C++ Programming Language, Bjarne Stroustrup, Addison-Wesley 1997.

Cforall adds overloading, opaque types, and polymorphism.

Cilk adds support for large-scale polymorphism.

C99 adds support for complex floating-point numbers and breaks other things.

Engler et. al describe methods for automatically inferring program invariants.

GNU C adds many extensions.

“Language Support for Regions,” (Gay et al.) from PLDI 2001.

Failure-oblivious computing (Rinard et al.) replaces out-of-bounds array accesses with sensible defaults.

ISO/IEC DTR 18037 extends C to support embedded processors

Meta-compilation for C (Willink)

Microsoft Visual C adds a handful of extensions.

Objective C adds objects as in Smalltalk.

Programmable Syntax Macros (Weise and Crew) add macros inspired by Lisp.

The Plan 9 C compiler (Ken Thompson) adds simple inheritance via anonymous structure elements.

“A Sound Polymorphic Type System for a Dialect of C” (Smith and Volpano).

Sparse is a C compiler that checks extra annotations like pointer sub-types.