【问题标题】:Getting compilation warnings for non-prototype declarations获取非原型声明的编译警告
【发布时间】:2012-01-12 09:43:23
【问题描述】:

在 C 中,函数声明可以是原型或非原型声明。例如,考虑以下最小程序:

int foo (); /* non-prototype declaration */

int bar (void); /* prototype declaration */

int main (int argc, char **argv)
{
  return 0;
}

尽管在 C99 中非原型声明已过时,但我无法让 GCC 抱怨它们。例如,用 GCC 编译上述程序并启用所有错误即可成功:

$ gcc -std=c99 -pedantic -Werror -Wall test.c
$

有什么方法可以说服 GCC 对不是原型的函数声明发出警告?

(受an answer 启发的问题Keith Thompson。)

【问题讨论】:

    标签: c gcc compilation compiler-warnings c99


    【解决方案1】:

    我认为您正在寻找的选项是-Wstrict-prototypes

    【讨论】:

    • 我以为 -Wall 会包含它,但显然我错了。 :-)
    【解决方案2】:

    请注意,gcc-std=c99 -pedantic -Wall 选项不会对旧式函数声明发出任何警告,但 C 不需要实现在存在旧式函数声明时发出诊断。

    C 将旧式函数声明的使用描述为自 C89 以来已过时,但它仍然有效的 C 代码(在 C89/C99/C11 中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2010-09-07
      • 2015-08-19
      • 2015-11-26
      • 2019-03-08
      • 2017-11-12
      相关资源
      最近更新 更多