我注意到我可以传递一个空参数而不是宏参数的普通参数。在这种情况下是否可以通过生成编译错误来防止这种行为?
#define AtLeastOneArg(arg, ...) arg
int main() {
AtLeastOneArg(;, ;); // compiles - OK
AtLeastOneArg(;); // compiles - OK
AtLeastOneArg(); // compiles - unexpected
}
我注意到我可以传递一个空参数而不是宏参数的普通参数。在这种情况下是否可以通过生成编译错误来防止这种行为?
#define AtLeastOneArg(arg, ...) arg
int main() {
AtLeastOneArg(;, ;); // compiles - OK
AtLeastOneArg(;); // compiles - OK
AtLeastOneArg(); // compiles - unexpected
}
现在
NONEMPTY()有一个错误,但NONEMPTY(42)它在 中显示出来42。与往常一样,如果您使用 MSVC,请务必
/std:c++latest /Zc:preprocessor启用支持__VA_OPT__(或20代替latest)。