In C, the #define token is widely used as a macro and maybe others. When we write a program with complex #define and such, maybe incorrectly used on top of another, how can we see if they are really correct?
In GCC (and probably others like c++), we can use -E flag to show what the code will look like after the preprocessing part, but not yet compiled.
For example, we write a short test code here:
#include/* Looking for the minimum */ #define MIN(a, b) (a < b ? a : b) int main(int argc, char *argv[]) { int a = 5; int b = 3; printf("%d\n", MIN(a, b)); return 0; }
With gcc -E now we see:
...... # 943 "/usr/include/stdio.h" 3 4 # 2 "arg.c" 2 int main(int argc, char *argv[]) { int a = 5; int b = 3; printf("%d\n", (a < b ? a : b)); return 0; }
Which is quite useful to see the validity of macro correctness.