c代码:如何检测重复的函数声明

时间:2016-03-11 15:44:57

标签: c compiler-warnings

makefile中是否有FLAG设置来检测重复的函数声明?

找到头文件中的重复函数声明,但编译器没有报告它,即使FLAG设置为"警告为错误"。

这会带来任何隐含的问题吗?

3 个答案:

答案 0 :(得分:1)

您正试图解决一个不存在的问题。重复的函数声明通常没有问题,因此编译器没有理由对它们进行诊断。

C编译器通常会在同一个编译单元中诊断情况,其中函数以多种方式声明(例如,具有不同返回类型或参数类型的相同函数的两个声明)。

重复的函数定义(特定类型的函数声明 - 实现函数)是一个问题。实际上,当编译单元中出现函数的多个定义时,编译器将发出警告或错误。链接器还将报告在多个编译单元中定义函数的情况 - 例外是内联函数或静态函数(其编译单元的本地函数)。

答案 1 :(得分:0)

重复的函数声明不是问题所以为什么编译器需要报告它是一个问题?

这种情况非常普遍:

来源1:

//definition
int func(void) {
...
}

来源2:

//declaration
extern int func(void);

来源3:

extern int func(void); //duplicate with source 2

答案 2 :(得分:0)

我不喜欢使用extern,尤其是功能。在单个头文件中声明您的函数,然后将该头文件包含在其他编译单元中。如果该函数仅由单个编译单元使用,则使用.c文件本身将其声明为静态。