C中函数的隐式声明

Posted

技术标签:

【中文标题】C中函数的隐式声明【英文标题】:Implicit declaration of function in C 【发布时间】:2016-08-10 13:17:05 【问题描述】:

是否有任何版本的 C 或任何不允许隐式声明函数的编译器?

例如。使用 mingw 编译器,如果我在我的程序中使用 printf 函数而不包含 stdio.h,它会编译我的程序,并显示警告“内置函数‘printf’的隐式声明不兼容”。

我想知道是否有某些版本的 C 或某些编译器在这些情况下无法编译我的程序。

最好的问候。

【问题讨论】:

为什么不看看各种编译器可用的各种选项?大多数允许您将警告作为错误 使用-Werror,代码不会编译。 1999 年的标准取消了隐式 int,因此使用 -std=c99 -Werror 进行编译应该会捕获任何隐式声明。 这很有趣。但是,我仍然对原始问题感兴趣。是否有任何编译器在其标准操作中不编译具有隐式声明的程序? 编译器已为您发出诊断。忽略此诊断意味着程序将具有未定义的行为。除非您从不打算更改编译器或升级您的编译器,否则应将警告视为错误。 【参考方案1】:

您可以在编译代码时使用-Werror 编译器选项。它将所有警告视为error。我喜欢使用这些选项编译我的源代码。

gcc -Wall -Werror -Wshadow -Wextra SOURCE.c -Wfloat-equal

【讨论】:

【参考方案2】:

编译时使用-Werror选项,所有警告都将被视为错误。

【讨论】:

以上是关于C中函数的隐式声明的主要内容,如果未能解决你的问题,请参考以下文章

函数'min'的隐式声明

为啥 gcc 给出警告:函数 qsort_r 的隐式声明?

mkstemp 函数的隐式声明

函数“memset”的隐式声明 [-Wimplicit-function-declaration] [重复]

函数的隐式声明是啥意思?

函数“AudioServicesPlaySystemSoundWithVibration”的隐式声明在 c99 中无效