试图创建一个仅在定义了某个宏时才记录数据的记录系统,我已经做了类似的事情:
#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)
,但我不知道两者之间的区别。
我不认为我的问题已被完全阅读,也无法与标记为重复的问题进行比较。