我有一个小项目,其中我在两个不同的源文件中命名了两个相同名称的函数,在构建项目时编译器出现错误,提示“func_name已经在filename.obj中定义”。
为什么我不能在两个不同的源文件中有两个同名函数?我认为只有在头文件中声明函数时,它才会成为全局函数,否则函数应该只在源文件中可用。
除了更改文件名之外,C语言中是否还有其他优雅的解决重复函数名称的方法?
我有一个小项目,其中我在两个不同的源文件中命名了两个相同名称的函数,在构建项目时编译器出现错误,提示“func_name已经在filename.obj中定义”。
为什么我不能在两个不同的源文件中有两个同名函数?我认为只有在头文件中声明函数时,它才会成为全局函数,否则函数应该只在源文件中可用。
除了更改文件名之外,C语言中是否还有其他优雅的解决重复函数名称的方法?
C语言中,默认情况下,函数具有全局作用域。为了限制其范围,请使用 static
关键字将其私有化到模块内部。
头文件的作用仅仅是向其他模块公开该函数及其签名。
所有全局名称必须(在某些情况下)唯一。这是有道理的,因为该名称是链接器用来将函数调用与函数本身的实现连接起来的。
具有静态和局部作用域的名称只需要在其作用域内是唯一的。
将函数声明为static
可使其局限于文件内。在C语言中,每个标识符名称必须是唯一的。
//In one of the two source files and any file that calls it
//if your functions is something like this
//void func_name(int) { ... }
//Add the following line
#define func_name SOME_UNIQUE_FUNC_NAME