因为如果定义和声明在回归类型或理由类型/编号上不一致,汇编者只是认为我宣布了单独的职能......
确实如此。 无论是从汇编者只想到这一点,还是从你宣布(和界定)单独职能这一意义上来说,都是如此。 在语言方面完全有效。
......并且根本不核实任何东西。
这并非完全正确。 汇编者仍然可以核实。 虽然不能(以你为例)抱怨<代码>func(int)下的定义与func(>
的声明不相符,但它可以抱怨/警告说,<代码>func(int)下的定义与/strong>声明不一致。
The goal is to catch mismatches that are likely mistakes. A non-inline
function with external linkage normally–if good practices are followed–should be declared (in a header) before it is defined (in a source file). If it is not, then there is reason to think the programmer made a mistake. Some compilers can be asked to issue a warning if this happens.
(由于这个问题已经老了,我做了一些挖掘。) 虽然我并不确切知道何时添加这一选择,但在提出这一问题三年前,该选择已公布于2012-03-13号。 因此,现在和提问时都是有效的答案。
gcc
gcc, 选项是https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmissing-declarations”rel=“nofollow noreferer”>-Wmissing-declarations
。 (这并未列入-Wall - Wextra
,可能是因为设置并非错误,可能只是意外的):
如果全球职能的定义没有以前的声明,则警告。 即使定义本身提供了原型,也如此。 采用这一办法探测在标题档案中未申报的全球功能。 在C,没有就以往非向型声明的功能发出警告;使用<代码>-Wmissing-prototypes探测缺失的原型。 在C++,没有对职能模板或在线职能或匿名名称空间的职能发出警告。
使你的榜样与这一警告保持一致
警告:以前没有宣布无效[声明]
so you know to double-check your declaration.