函数在头文件声明函数,为啥要加extern关键字?
在C语言中,函数声明前的 extern
关键字实际上是可选的,对于函数来说,加不加 extern
效果是一样的。
头文件
extern void func1(void);
c文件
void func1(void)
{/*code*/
}
为什么这里要加 extern
关键字?
-
明确意图:使用
extern
可以明确表示这些函数是在其他地方定义的,需要在链接时从其他目标文件中找到它们的定义。 -
与变量声明保持一致:在头文件中,对于全局变量通常必须使用
extern
来声明(定义在源文件中),为了保持一致性,函数声明也使用extern
。 -
代码可读性:让代码阅读者更清楚地知道这些函数是从外部引入的接口。
-
编码规范:可能是项目的编码规范要求所有外部函数都显式使用
extern
关键字。
C语言中的函数声明规则
// 这两种声明是等价的:
extern void func1(void); // 显式使用 extern
void func2(void); // 隐式 extern(默认就是 extern)
对于函数来说,无论是否使用 extern
,编译器都会将其视为外部函数声明。
对比变量声明
与函数不同,变量声明必须使用 extern
才能表示声明而非定义:
// 变量的情况:
extern int global_var; // 声明(正确)
int global_var; // 定义(会在当前文件分配存储空间)
总结
在这个头文件中使用 extern
主要是为了:
- 代码风格统一(与变量声明保持一致)
- 提高代码可读性
- 明确表达设计意图
- 遵循项目编码规范
虽然对于函数来说 extern
是可选的,但加上它并没有害处,还能让代码意图更加清晰。