extern关键字在h头文件中是默认的
头文件(.h
文件)中的声明默认是 extern
的,即使你没有显式地写出 extern
关键字。这样做是因为头文件的目的是提供符号的声明,而不是定义(即不提供函数或变量的具体实现)。C 和 C++ 编译器会默认认为头文件中的全局函数和变量声明是 extern
,即这些符号在其他源文件中定义。
例子:
没有 extern
显式声明的情况
// core_section.h
#ifndef CORE_SECTION_H
#define CORE_SECTION_H
int CoreSectionInit(void); // 这行默认就是 extern int CoreSectionInit(void);
#endif // CORE_SECTION_H
这里的 int CoreSectionInit(void);
仅仅是声明了该函数,它相当于 extern int CoreSectionInit(void);
,编译器会默认假设它是 extern
,并且它在其他源文件中有定义。
明确使用 extern
声明的情况
// core_section.h
#ifndef CORE_SECTION_H
#define CORE_SECTION_H
extern int CoreSectionInit(void); // 显式声明为 extern
#endif // CORE_SECTION_H
在这个例子中,extern
明确地告诉编译器该函数在其他地方定义,但实际上这两种写法在功能上是一样的。对于外部符号(如函数和全局变量),C 和 C++ 编译器默认会假定它们是 extern
的,意味着它们在其他地方有定义。
为什么头文件中的声明默认是 extern
?
- 头文件中的内容通常是为了让多个源文件共享声明,而不是定义。
- 头文件用于声明变量和函数等,以便其他源文件能够引用它们。为了避免重复定义,声明默认是
extern
,意味着它们的实际定义会在其他地方找到。 - 如果你在头文件中显式定义了某个变量或函数(如全局变量定义、内联函数等),那就不需要使用
extern
了,因为它的定义已经包含在头文件中。
结论
- 头文件中函数和变量的声明默认是
extern
,即使没有显式写出extern
,编译器也会假定它们是外部符号。 - 如果你在头文件中需要定义(而不仅是声明)一个变量或函数,才需要特别声明为
extern
,或者将其定义放入源文件中。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18545036,如有侵权联系删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律