Search notes:
Preprocessor: Parantheses and commas
#define call(func, arg, cond) if (cond) { func(arg); }
#define COMMA ,
call(printf, "foo bar baz\n", true)
call(printf, "a = %d, b=%s\n" COMMA a COMMA b, get_flag("a" COMMA "b"))
call(printf, "d = %d, s=%s\n" COMMA (a+b)*2 COMMA get_val(1 COMMA 2), get_flag("a" COMMA "b") )
After running this translation unit through
gcc -E -P
, it produces:
if (true) { printf("foo bar baz\n"); }
if (get_flag("a" , "b")) { printf("a = %d, b=%s\n" , a , b); }
if (get_flag("a" , "b")) { printf("d = %d, s=%s\n" , (a+b)*2 , get_val(1 , 2)); }
Makefile
prog.i: prog.c
gcc -E -P $< -o $@