0

Microsoft Visual Studio Professional 2015 版本 14.0.25431.01 Update 3在编译以下代码时出现错误。对我来说似乎是一个错误。


谢谢你。

#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;
}
4

1 回答 1

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++ 会理解它。

于 2016-12-28T17:16:27.603 回答