有没有办法让GCC在预处理期间显示某些预处理值的值?特别是,如果我运行相当于:
gcc input.c -E >/dev/null
有没有办法获得扩展宏的实际值?考虑这个例子:
#if defined(A)
#define B bar
#else
#define B foo
#endif
#define XSTR(x) STR(x)
#define STR(x) #x
int main() {
#pragma message "B is " XSTR(B)
#error DIE
B a = 2;
return 0;
}
我想在这种情况下找出B is foo
。
在我的实际设置中,我无法访问完全预处理的文件,我无法删除-E
标记。
基本原理:我有一个复杂的文件设置,由于错误定义的宏而导致语法错误很多,调试它的最快方法是使用这个#pragma/#error
组合找出实际值,停止编译,手动修复它,然后再次运行GCC以找出下一个错误发生的位置。