带有if语句的C预处理器

dim*_*mba 6 macros c-preprocessor

我有以下宏:

#define IF_TRACE_ENABLED(level)  if (IsTraceEnabled(level))
Run Code Online (Sandbox Code Playgroud)

用户代码应如下所示:

IF_TRACE_ENABLED(LEVEL1)
{
    ... some very smart code
}
Run Code Online (Sandbox Code Playgroud)

这里强调大括号 - 我想阻止"if"从宏到"吃掉"其他代码:

if (...)
   IF_TRACE_ENABLED(LEVEL1)
      printf(....);
else
   bla bla bla
Run Code Online (Sandbox Code Playgroud)

在这个例子中IF_TRACE_ENABLED"吃"其他块.

有没有办法强制用户代码不编译没有卷曲刹车或有其他定义宏来实现安全?

Mic*_*urr 11

这不会强制宏的用户使用大括号,但它会阻止else子句被无意中吃掉:

#define IF_TRACE_ENABLED(level)  if (!IsTraceEnabled(level)) {} else 
Run Code Online (Sandbox Code Playgroud)

旁注:printf()问题的第二个示例中的括号不会修复问题 - else关联的bla bla bla仍然会绑定到if宏中的语句.