SubC is a fast and simple public domain compiler for a clean subset of
the C programming language. It can compile itself and passes
gcc -Wall -pedantic. Its internals are
described in detail in the book
Practical Compiler Construction
Note that SubC is a teaching vehicle rather than a production compiler. Check the README files to find out what it can and cannot do. If you are planning to do something more serious with SubC, you may want to get the current version rather than the book version.
The Windows runtime support code has been written by Jean-Marc Lienher (cod5.org). The Darwin back-end and startup module have been contributed by Romain LWPB. Many thanks for the great effort!
The current version supports the following platforms:
(The 2014-01-15 snapshot is the last version containing the old, stack-based back-end (in addition to the new one). It has no armv6, Darwin, or DOS support. The book version runs on FreeBSD/386 exclusively.)
Stable back ends are regression-tested before each release. Untested ports should be stable but are not regularly tested due to lack of resources. The DOS version is just a cross compiler right now. It is not self-hosting on DOS.
?:is an expression, not a logic op. (
a?b,c:dis a valid expression).
kprintf()function, which is like
fprintf(), but uses a file descriptor.
FILEs are now structs and can no longer be mistaken for
ints by the type checker.
jmp_bufis now a struct;
longjmp()must be called with
&jmp_buf(this is a bug).
registerkeywords are now recognized (as no-ops).
&arrayis now valid syntax (you no longer have to write