此代码段是否可移植?
定义:
#define log(...) std::cout << __FILE__ << "[" << __LINE__ << "]:" \
<< string_format(__VA_ARGS__) \
<< std::endl << std::flush
用法:
log("i = %d", i);
和string_format是sprintf,它输出一个取自https://stackoverflow.com/a/8098080/624074的std :: string它与我的gcc 4.6.3一起使用,但我不希望以后与其他编译器有编译问题。
答案 0 :(得分:2)
是的,宏__VA_ARGS__
是标准C ++的一部分:
C ++11§16.3.1参数替换
替换列表中出现的标识符
__VA_ARGS__
应被视为参数,变量参数应构成用于替换它的预处理标记。
答案 1 :(得分:2)
在大多数情况下,它非常便携。它是C ++ 11语言标准(以及C99)的一部分,因此大多数现代编译器都支持它。您可能会遇到只支持C ++ 03的旧编译器的问题。