我用几个编译器编译了一个程序,其中一个抱怨某个静态函数声明在某个编译单元中没有定义。我想知道标准是否对此有所规定。 在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此根本没有用。
答案 0 :(得分:1)
静态函数仅在该编译单元内部可见。
静态函数声明提供此类函数的原型(名称,返回类型和参数)。
静态函数定义提供了该函数的实现。
已声明 但未使用 且没有实现的静态函数不应引起警告。如果可以使用但没有实现(在该编译单元中),则它是一个错误。
static int NotUsed(int not_used); // perfectly legal without implementation if not used
答案 1 :(得分:0)
我想知道标准是否对此有所规定。
不,标准不需要:
5.1.1.3诊断
- 一致的实现方式应至少产生一条诊断消息(以实现定义的方式标识)如果预处理翻译单元或翻译单元包含违规内容 语法规则或约束,即使该行为也已明确指定为未定义或 实现定义的。 在其他情况下无需生成诊断消息。 9)
通常,标准似乎并不关心那些不会带来积极危害的问题。不必要的声明不会阻止构建正确的程序。
在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此根本没有用。
如您所见,一些编译器提供商同意您的观点。但这不是标准的必需。