宏 – 使用if语句的C预处理程序

前端之家收集整理的这篇文章主要介绍了宏 – 使用if语句的C预处理程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下宏:
#define IF_TRACE_ENABLED(level)  if (IsTraceEnabled(level))

用户代码应如下所示:

IF_TRACE_ENABLED(LEVEL1)
{
    ... some very smart code
}

这里强调大括号 – 我想阻止“if”从宏到“吃掉”其他代码

if (...)
   IF_TRACE_ENABLED(LEVEL1)
      printf(....);
else
   bla bla bla

在这个例子中,IF_TRACE_ENABLED“吃掉”其他块.

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

解决方法

这不会强制宏的用户使用大括号,但它会阻止else子句被无意中吃掉:
#define IF_TRACE_ENABLED(level)  if (!IsTraceEnabled(level)) {} else

旁注:问题的第二个例子中printf()周围的大括号不会解决问题 – 与bla bla bla相关联的else仍将绑定到宏中的if语句.

猜你在找的C&C++相关文章