VC 错误?编译器无法计算 __VA_ARGS__' 个参数
VC Bug? Compiler Unable to Count __VA_ARGS__' Arguments
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;
}
在我看来这也是一个错误。可以使用另一层宏来解决它:
#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++ 可以理解你是否强制它再次扩展。
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;
}
在我看来这也是一个错误。可以使用另一层宏来解决它:
#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++ 可以理解你是否强制它再次扩展。