do {} while(0)与空语句

时间:2018-12-26 13:20:55

标签: c++ macros

试图创建一个仅在定义了某个宏时才记录数据的记录系统,我已经做了类似的事情:

#ifdef _DEBUG
#define foo(a) std::cout << a << std::endl
#else
#define foo(a) 
#endif

int main()
{
    foo("Hello!");
    return 0;
}

函数main经过预处理后扩展为:

int main()
{
    ;
    return 0;
}

但是,在某些地方,我看到人们使用do{}while(0)而不是空的宏。我想一个编译器可以优化这两个方面,但是我想知道一个人比另一个人有优势吗?

我知道同时需要一个空语句和do{}while(0),但我不知道两者之间的区别。

我不认为我的问题已被完全阅读,也无法与标记为重复的问题进行比较。

0 个答案:

没有答案