【发布时间】:2017-12-16 16:30:55
【问题描述】:
我有两个头文件,它们定义了两个具有相同名称和不同参数的函数。我知道 c 不支持函数重载,但我认为在函数声明中添加 static 将允许我声明两个具有相同名称的函数,但需要注意的是我只能在同一个源文件中访问它们。无论如何它不工作,我不知道为什么不?是不是我的理解错了?
示例: file1.h 有以下功能:
static bool do_something(int a);
file2.h 有以下功能:
static bool do_something(char b);
main.cpp 包含两个标头:
#include "file1.h"
#include "file2.h"
示例错误:
file1.h:26:13: error: conflicting types for ‘do_something’
static bool do_something(int a);
file2.h:23:13: note: previous declaration of ‘do_something’ was here
static bool do_something(char b);
提前致谢。
【问题讨论】:
-
static怎么会有所作为?这是相互矛盾的声明。 -
在头文件中声明
static函数没有多大意义。 -
主要原因是C在创建可执行文件时会使用你的函数名来识别函数链接,如果同名出现两次,链接器将不知道哪个是好的。我不认为
static对 C 中的名称修改有任何影响,您必须遵守 ODR(一个定义规则)。无论如何,您的想法在您的情况下不起作用,因为您的main.cpp文件包含这两个文件,因此从main.cpp的角度来看,无论如何都有 2 个可见的冲突定义。如果它是从不同的源文件中使用的,我不确定链接器是否会抱怨或选择一个函数。 -
感谢大家的回答。
-
请注意,以
.cpp结尾的文件名通常表示 C++ 代码而不是 C 代码。你有正确的标签吗?正确的编译器?
标签: c