gpt4 book ai didi

c++ - 忽略 `gnu-zero-variadic-macro-arguments` 是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:34 38 4
gpt4 key购买 nike

考虑以下代码 (live example) :

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

clang++ 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

我在项目的示例代码中使用了一些可变参数宏。

不为可变参数宏的 ... 参数传递任何参数是否安全? (基本上忽略警告)

或者它会导致问题吗?

标准是否明确禁止?

最佳答案

从 C++20 开始,允许将零参数传递给可变宏参数,但 Clang(至少 Clang 12)尚不支持此更改。

因此,如果您的目标是 C++20 或更新版本并使用 -pedantic-errors,则 -Wno-gnu-zero-variadic-macro-arguments 是推荐。


[cpp.replace.general]/5

... there shall be at least as many arguments in the invocation as there are parameters in the macro definition (excluding the ...).

关于c++ - 忽略 `gnu-zero-variadic-macro-arguments` 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266380/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com