PSk*_*cik 5 c gcc clang c-preprocessor
我有一个非常常用的,有点复杂的宏(MAC(...)为了这个问题,我们称之为),它必须是一个宏(因为它是非常通用的类型)。该宏在语法上表现得像函数调用,但在内部调用了 10 多个其他宏。
因此,如果我在调用时出错,MAC()例如,如果我这样做:MAC(1-)gcc/clang 将向我转储我根本不
感兴趣的相当长的预处理器堆栈跟踪MAC()。
如果我像这样定义 MAC():
#if DEBUG_MAC
int MAC(); //so I get a nice preprocessor stack trace
#else
#define MAC(...) //here would come the actual definition
#endif
Run Code Online (Sandbox Code Playgroud)
然后,在遇到我用 重新编译的错误时-DDEBUG_MAC,我得到了一个很好的(=不存在的)预处理器堆栈跟踪,但这种方法感觉很笨拙,只能用于诊断硬错误,而不是警告。
有没有办法让 gcc 或 clang 表现得像这样,即,为了错误报告的目的,将宏视为不透明的函数调用,而不进行这种声明/宏改组?