C 没有定义的静态函数声明
我用几个编译器编译了一个程序,其中一个编译器抱怨在某个编译单元中没有定义的静态函数声明。我想知道《标准》是否对此有任何规定。C 没有定义的静态函数声明,c,language-lawyer,C,Language Lawyer,我用几个编译器编译了一个程序,其中一个编译器抱怨在某个编译单元中没有定义的静态函数声明。我想知道《标准》是否对此有任何规定。 在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此没有任何用处。静态函数只在该编译单元中可见 静态函数声明提供此类函数的原型(名称、返回类型和参数) 静态函数定义给出了函数的实现 声明但未使用且没有实现的静态函数不应引起警告。如果它被使用但没有实现(在编译单元中),那么它就是一个错误 我想知道《标准》是否对此有任何规定 不,标准不要求: 5.1.1
在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此没有任何用处。静态函数只在该编译单元中可见 静态函数声明提供此类函数的原型(名称、返回类型和参数) 静态函数定义给出了函数的实现 声明但未使用且没有实现的静态函数不应引起警告。如果它被使用但没有实现(在编译单元中),那么它就是一个错误 我想知道《标准》是否对此有任何规定 不,标准不要求: 5.1.1.3诊断
正如您所看到的,一些编译器提供程序同意您的观点。但这并不是标准所要求的。我明白了:这里有一个警告,你同意这是有道理的,但你想知道标准是否对此有所说明?我认为标准并没有提到编译器应该警告什么。哪个编译器抱怨了?怎么抱怨?发布确切的编译器消息,包括从编译器获得的行号和文件名,包括编译器版本和编译器选项,以及复制问题所需的最小可复制源代码和步骤。我们无法帮助某些奇怪的编译器向您“抱怨”。@domen C标准规定,编译器必须给出约束冲突的诊断消息,即明确违反标准的情况。但是,标准中没有“警告”和“错误”这两个术语,标准中也没有提到编译器在出现语言冲突时可能产生的二进制输出。我想声明,我没有投票结束这个问题,因为它“太宽泛了”(因为它不是)。我投票决定结束,因为还不清楚她被问到了什么,也没有得到任何澄清。一旦问题得到充分澄清,我将投票重新开始讨论。
static int NotUsed(int not_used); // perfectly legal without implementation if not used