Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 没有定义的静态函数声明_C_Language Lawyer - Fatal编程技术网

C 没有定义的静态函数声明

C 没有定义的静态函数声明,c,language-lawyer,C,Language Lawyer,我用几个编译器编译了一个程序,其中一个编译器抱怨在某个编译单元中没有定义的静态函数声明。我想知道《标准》是否对此有任何规定。 在我看来,在这里抱怨是有道理的,因为该函数不能在另一个编译单元中使用,因此没有任何用处。静态函数只在该编译单元中可见 静态函数声明提供此类函数的原型(名称、返回类型和参数) 静态函数定义给出了函数的实现 声明但未使用且没有实现的静态函数不应引起警告。如果它被使用但没有实现(在编译单元中),那么它就是一个错误 我想知道《标准》是否对此有任何规定 不,标准不要求: 5.1.1

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

静态函数只在该编译单元中可见

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

静态函数定义给出了函数的实现

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

我想知道《标准》是否对此有任何规定

不,标准不要求:

5.1.1.3诊断
  • 如果预处理翻译单元或翻译单元包含冲突,则一致性实现应至少产生一条诊断消息(以实现定义的方式识别) 任何语法规则或约束,即使行为也明确指定为未定义或 实现定义在其他情况下不需要生成诊断消息。9)
  • 总的来说,标准似乎并不关心那些并不积极有害的问题。不必要的声明不会阻止正确程序的构造

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


    正如您所看到的,一些编译器提供程序同意您的观点。但这并不是标准所要求的。

    我明白了:这里有一个警告,你同意这是有道理的,但你想知道标准是否对此有所说明?我认为标准并没有提到编译器应该警告什么。哪个编译器抱怨了?怎么抱怨?发布确切的编译器消息,包括从编译器获得的行号和文件名,包括编译器版本和编译器选项,以及复制问题所需的最小可复制源代码和步骤。我们无法帮助某些奇怪的编译器向您“抱怨”。@domen C标准规定,编译器必须给出约束冲突的诊断消息,即明确违反标准的情况。但是,标准中没有“警告”和“错误”这两个术语,标准中也没有提到编译器在出现语言冲突时可能产生的二进制输出。我想声明,我没有投票结束这个问题,因为它“太宽泛了”(因为它不是)。我投票决定结束,因为还不清楚她被问到了什么,也没有得到任何澄清。一旦问题得到充分澄清,我将投票重新开始讨论。
    static int NotUsed(int not_used);  // perfectly legal without implementation if not used