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 に答える