我的旧标题包含一个允许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__)
每次插入调试语句时,我还没有遇到一种不那么“邪恶”的调试方法,而不是编写所有这些内容。