【问题标题】:GCC compiler warning flag for zero variadic macro arguments零可变参数宏参数的 GCC 编译器警告标志
【发布时间】:2016-02-23 19:28:05
【问题描述】:

GCC 中零可变参数宏参数的编译器警告标志是什么(我使用的是 GCC 5.3.0)?

警告是由这样的代码触发的

// for illustration purposes only:
int foo(int i) { return 0; };
#define FOO(A, ...) foo(A, ##__VA_ARGS__)
FOO(1);
      ^  warning: ISO C++11 requires at least one argument for the "..." in a variadic macro

但警告并未指明使用哪个标志来启用/禁用警告(这通常显示在方括号[-Wwarning-flag-name] 中)。

在clang中是-Wgnu-zero-variadic-macro-arguments。我在warning documentation of gcc-5.3.0 中找不到类似的东西。

我试过-Wgnu-zero-variadic-macro-arguments、-Wvarargs、-Wno-variadic-macros(感谢@Revolver_Ocelot),但这些都不是负责这个警告的。

【问题讨论】:

  • 您到底想达到什么目的?看起来 foo(int i) 的定义方式并未使其与可变参数宏兼容。
  • @Xirema 我正在尝试禁用警告,该示例仅用于说明目的。
  • 那么FOO(1,);呢?
  • 据我所见,此警告似乎仅在使用 -pedantic 编译时才会出现。如果不使用,则没有警告(在我的机器上)。我不确定您是否可以使用 -pedantic 隐藏警告

标签: c++ gcc


【解决方案1】:

导致问题的警告标志是-Wpedantic。这是因为省略可变参数是非法的,并且需要诊断。警告满足该要求。

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多