C Craft
a day ago
- Size 0 arrays in GNU C serve as flexible arrays, with C99 supporting similar but disallowing explicit zero size declarations.
- Size 1 arrays can mimic flexible arrays where size 0 is disallowed or enable uniform stack/heap interface with pointer-like syntax.
- Using 'do...while(0)' in macros ensures safe inclusion in conditionals; GNU C's expression statements offer alternatives.
- C's boolean logic, returning 0 or 1, enables Iverson brackets for concise conditions, contrasting with C99's boolean type.
- Tagged pointers leverage alignment bits for metadata storage, requiring masking during dereferencing but can be over-optimized.
- GNU C's nested functions provide closures, simplifying APIs like factorization callbacks, though trampolining may be restricted.
- Goto statements are useful in specific cases like implementing efficient virtual machines (computed goto), inner loops, and coroutines.
- Information hiding via file scope (opaque structs) separates interface from implementation; exposing structs can optimize performance.
- Memory-mapped files allow direct file access via arrays, leveraging kernel paging for efficiency, with 'die' functions for error handling.
- Little languages (e.g., expression interpreters) and metaprogramming (code generators) extend C's capabilities for domain-specific problems.