首页 > 其他分享 >extern关键字在h头文件中是默认的

extern关键字在h头文件中是默认的

时间:2024-11-13 23:08:54浏览次数:1  
标签:头文件 定义 中是 默认 extern 声明 SECTION

头文件(.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,或者将其定义放入源文件中。

标签:头文件,定义,中是,默认,extern,声明,SECTION
From: https://www.cnblogs.com/chentiao/p/18545036

相关文章