Download PDF
Integer literals and variable assignment in C, and naming conventions
Integer addition and subtraction in C
Integer multiplication and division in C
Evaluating mathematical expressions using abstract syntax trees, and -fix notation
Types of integers in C, characters and casting
Goto and switch in C
const, register and volatile in C
The C preprocessor
enum and const
Bitwise operations in C
Pointers and arrays in C
Strings in C
Floats in C
Structs in C
Booleans in C
Global and local scope in C
Relations and logical operators
Control flow and logic in C and the structured program theorem
Functions and stack memory in C
Side effects and sequence points in C
Typedef in C
Optimising compiled C code, including tail call optimisation and the restrict keyword
Macros and the C preprocessor
stddef.h - including size_t and the sizeof operator
Macros for boolean variables using stdbool.h
Allowing indefinite function arguments using stdarg.h
Adding fixed width integers with stdint.h
Documenting non-returning functions using stdnoreturn.h
Getting and setting type width using stdalign.h
Getting upper and lower integer limits using limits.h
Macros for operations (eg "and", "bitand") using iso646.h
float.h
Static single-assignment form
Writing architecture specific C compiler in m0, eg cc_x86
Building m2-planet, mes, tcc, meslibc, musl, core utils, gcc
Adds ability to prefix functions with noreturn.
This hints to the compiler and reader that the function will not return. Eg if there is an infinite loop.
noreturn void loop_forever() { int x = 1; while(1) { x = 2; } }