============================================ Include directives ============================================ #include "some/path.h" #include --- (translation_unit (preproc_include (string_literal)) (preproc_include (system_lib_string))) ============================================ Object-like macro definitions ============================================ #define ONE #define TWO int a = b; #define THREE \ c == d ? \ e : \ f --- (translation_unit (preproc_def (identifier)) (preproc_def (identifier) (preproc_arg)) (preproc_def (identifier) (preproc_arg))) ============================================ Function-like macro definitions ============================================ #define ONE() a #define TWO(b) c #define THREE(d, e) f #define FOUR(...) g #define FIVE(h, i, ...) j --- (translation_unit (preproc_function_def (identifier) (preproc_params) (preproc_arg)) (preproc_function_def (identifier) (preproc_params (identifier)) (preproc_arg)) (preproc_function_def (identifier) (preproc_params (identifier) (identifier)) (preproc_arg)) (preproc_function_def (identifier) (preproc_params) (preproc_arg)) (preproc_function_def (identifier) (preproc_params (identifier) (identifier)) (preproc_arg))) ============================================ Ifdefs ============================================ #ifndef DEFINE1 int j; #endif #ifdef DEFINE2 ssize_t b; #define c 32 #else int b; #define c 16 #endif #ifdef DEFINE2 #else #ifdef DEFINE3 #else #endif #endif --- (translation_unit (preproc_ifdef (identifier) (declaration (identifier) (identifier))) (preproc_ifdef (identifier) (declaration (identifier) (identifier)) (preproc_def (identifier) (preproc_arg)) (preproc_else (declaration (identifier) (identifier)) (preproc_def (identifier) (preproc_arg)))) (preproc_ifdef (identifier) (preproc_else (preproc_ifdef (identifier) (preproc_else)))))