__VA_ARGS__,此代码段是否可移植?

时间:2014-01-09 02:19:28

标签: c++

此代码段是否可移植?

定义:

#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一起使用,但我不希望以后与其他编译器有编译问题。

2 个答案:

答案 0 :(得分:2)

是的,宏__VA_ARGS__是标准C ++的一部分:

  

C ++11§16.3.1参数替换

     

替换列表中出现的标识符__VA_ARGS__应被视为参数,变量参数应构成用于替换它的预处理标记。

答案 1 :(得分:2)

在大多数情况下,它非常便携。它是C ++ 11语言标准(以及C99)的一部分,因此大多数现代编译器都支持它。您可能会遇到只支持C ++ 03的旧编译器的问题。