```shell chibicc -E macro.c ``` will get ```text BAR() 1 ``` however ```shell gcc -E macro.c ``` will get ```text BAR_I ()() 1 1 1 ``` ```c // macro.c #define EMPTY() #define DEFER(id) id EMPTY() #define EXPAND(...) __VA_ARGS__ #define BAR_I() BAR #define BAR() DEFER(BAR_I)()() 1 EXPAND(EXPAND(BAR())) ```