3

我的一个旧标题包含一个允许 0 个参数的可变参数宏。当使用 gcc 4.7.3 针对 C++11 编译时,##令牌似乎不再删除前面的逗号。

#define FOOCRO(...) printf("42\n", ## __VA_ARGS__)

int main(){
    FOOCRO(); // dumped from gcc -E: printf("42\n",); //comma still in place
    return 0;
}

我认为这可能是一个间距问题,但放置##似乎对逗号删除没有任何影响。

编辑

以免我因一些被认为滥用了讨厌的功能而受到指责,这是我为这个问题简化的源宏:

#define LOG(...) Logger::Write(__FILE__,__LINE__, ##__VA_ARGS__)

我还没有遇到过一种不那么“邪恶”的调试方式,每次插入调试语句时都不需要编写所有这些繁琐的代码。

4

0 回答 0