VC Bug?编译器无法计数__VA_ARGS __'参数

时间:2016-12-28 16:53:01

标签: variadic-macros visual-c++-2015

Microsoft Visual Studio Professional 2015版本14.0.25431.01更新3 在编译code below时发出错误。对我来说看起来像个错误。


谢谢。

#include <iostream>

#define A( a, b, c, ... ) #__VA_ARGS__
#define B( ... ) A(__VA_ARGS__)

int main()
{
  // warning C4003: not enough actual parameters for macro 'A'
  // error C2059: syntax error: ';'
  std::cout << B( 1, 2, 3, 4 ); // should print '4'                                    
  return 0;
}

1 个答案:

答案 0 :(得分:2)

对我来说这看起来也像个错误。可以使用另一层宏来解决它:

#define EXPAND(...) __VA_ARGS__
#define A( a, b, c, ... ) #__VA_ARGS__
#define B( ... ) EXPAND(EXPAND(A) (__VA_ARGS__))

首先,EXPAND(A)扩展为A(__VA_ARGS__)扩展为( 1, 2, 3, 4 )。然后,你离开了A ( 1, 2, 3, 4 ),如果你强迫它再次扩展,VC ++会理解。