考虑下面的代码(live example):'gnu-zero-variadic-macro-arguments`可以安全地忽略吗?
#define TEST_VA(mX, ...) TEST
#define STRINGIFY_IMPL(mX) #mX
#define STRINGIFY(mX) STRINGIFY_IMPL(mX)
#include <iostream>
int main()
{
std::cout << STRINGIFY(TEST_VA(1)) << std::endl;
std::cout << STRINGIFY(TEST_VA()) << std::endl;
return 0;
}
铛++ 3.4抱怨:
main.cpp:9:37: warning: must specify at least one argument for '...' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]
std::cout << STRINGIFY(TEST_VA(1)) << std::endl;
^
main.cpp:1:9: note: macro 'TEST_VA' defined here
#define TEST_VA(mX, ...) TEST
^
main.cpp:10:33: warning: must specify at least one argument for '...' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]
std::cout << STRINGIFY(TEST_VA()) << std::endl;
^
main.cpp:1:9: note: macro 'TEST_VA' defined here
#define TEST_VA(mX, ...) TEST
我在我的项目的示例代码使用一些复杂的宏等。
为可变宏的...
参数传递参数是否安全? (基本上忽略警告)
或者是否会导致问题?
是否明确禁止标准?
@FrançoisMoisan[工作标准草案](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf)包含与宏和预处理有关的部分。 –