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,或者将其定义放入源文件中。
posted @   海_纳百川  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
本站总访问量8968374
 
点击右上角即可分享
微信分享提示