1 C Metaprogramming Utilities
This package provides utilities for manipulating C programs.
1.1 Getting Started
The easiest way to get started using the C metaprogramming utilities is with the main module:
(require c) | package: c-utils |
This module provides everything in the entire package. Subsequent sections of this manual describe the functionality of the individual libraries included, which can also be required individually.
> (define time.h (header (struct tm ([int tm_sec] [int tm_min] [int tm_hour] [int tm_mday] [int tm_mon] [int tm_year] [int tm_wday] [int tm_yday] [int tm_isdst]))))
> (define time (compile-header time.h (system-compiler #:include<> '("time.h") gcc)))
> (layout-offset (time 'tm) 'tm_year) 20
Binary layout information is especially useful for interacting with the foreign
library—
1.2 Libraries Provided by this Package
This package includes:
A library of abstract syntax for the C99 language–see The C Language
A library for parsing C99 programs–see Parsing and Reading C
A (preliminary) library providing S-expression syntax for C–see Parenthetical C
A library for compiling and running C programs with an external compiler–see Evaluation
A library for compiling C header information–see Header Compilation
1.3 Known Limitations
The parser does not recognize the C preprocessor. I may attempt to implement the preprocessor in the future, but there’s no guarantee at this point.
The grammar does not support any extensions for GCC, MSVC, or any other specific C implementations. I intend to add support for these extensions on a by-need basis. Specific requests (as well as patches) are welcome.
External compilation is currently limited to GCC. I intend to add support for additional compilers on a by-need basis; patches are welcome.
1.4 Feedback and Bug Reports
Before sending feedback or bug reports, please consult the current set of registered issues. If you cannot find your issue there, feel free to file a new bug report in the online issue database.
Any other feedback may be emailed to me, Dave Herman, at dherman@ccs.neu.edu.
1.5 History
Version 0.1 (2009-02-01) - Initial release. Reasonably usable for header extraction.
Version 0.2 (2009-03-09) - Full C99 parser implemented.
Version 0.3 (2009-03-31) - Some cleanup of the AST API.
Version 0.4 (2009-09-16) - Fixed parser bug 202: the grammar should be complete now.
Version 0.5 (2012-02-26) - Updated for Racket.