没有定义的静态函数声明

时间:2019-05-22 07:31:16

标签: c language-lawyer

我用几个编译器编译了一个程序,其中一个抱怨某个静态函数声明在某个编译单元中没有定义。我想知道标准是否对此有所规定。 在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此根本没有用。

2 个答案:

答案 0 :(得分:1)

静态函数仅在该编译单元内部可见。

静态函数声明提供此类函数的原型(名称,返回类型和参数)。

静态函数定义提供了该函数的实现。

已声明 但未使用 且没有实现的静态函数不应引起警告。如果可以使用但没有实现(在该编译单元中),则它是一个错误

static int NotUsed(int not_used);  // perfectly legal without implementation if not used

答案 1 :(得分:0)

  

我想知道标准是否对此有所规定。

不,标准不需要:

  

5.1.1.3诊断

     
      
  1. 一致的实现方式应至少产生一条诊断消息(以实现定义的方式标识)如果预处理翻译单元或翻译单元包含违规内容   语法规则或约束,即使该行为也已明确指定为未定义或   实现定义的。 在其他情况下无需生成诊断消息。 9)
  2.   

通常,标准似乎并不关心那些不会带来积极危害的问题。不必要的声明不会阻止构建正确的程序。

  

在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此根本没有用。

如您所见,一些编译器提供商同意您的观点。但这不是标准的必需