extern为什么必须写在.h文件里
时间: 2024-04-17 13:28:30 浏览: 19
在C/C++中,extern关键字通常用于声明一个变量或函数是在其他文件中定义的。当你在一个文件中使用extern声明一个函数或变量时,编译器会知道它们在其他文件中定义,并且可以在链接时将它们连接起来。
通常情况下,我们会将这些外部定义的函数或变量的声明放在头文件中,以便其他文件可以包含这个头文件,并在需要使用这些变量或函数时使用extern来引用它们。这样做的好处是可以避免重复定义同名符号,同时也可以使代码更加清晰和易于维护。
因此,extern关键字通常会出现在头文件中,以确保在不同的文件中使用相同的符号时,编译器能够正确地解析它们。
相关问题
为什么.h文件里面需要加上extern "C"
extern "C" 是一种C++的语法,其作用是告诉编译器使用C语言的命名规则和链接规则,使得C++与C语言可以进行混合编程。在编写C++代码时,如果需要调用C语言编写的函数或者调用C语言编写的库,就需要使用extern "C"来指定其链接规则和命名规则,否则会出现链接错误。因此,在.h文件中加上extern "C"可以避免链接错误,使得C++与C语言的代码可以互相调用。
在.h文件中进行extern对函数的修饰
在.h文件中使用`extern`关键字来修饰函数的声明是可行的,它可以用于在多个源文件之间共享函数的声明。
通常,.h文件用于存放函数的声明和结构体、枚举等的定义。当多个源文件需要使用相同的函数时,可以在.h文件中声明这些函数,并在需要使用它们的源文件中包含该.h文件。
当在.h文件中声明函数时,使用`extern`关键字可以显式地说明该函数是在其他源文件中定义的,而不是在当前源文件中定义。这样,在包含该.h文件的源文件中,就可以使用该函数而不会导致重复定义错误。
例如,假设有一个functions.h文件,其中声明了一个函数:
functions.h:
```c
extern void sharedFunction(); // 声明一个在其他文件中定义的函数
```
然后,在其他源文件中定义该函数:
file1.c:
```c
#include "functions.h"
void sharedFunction() {
// 函数定义
}
```
file2.c:
```c
#include "functions.h"
int main() {
sharedFunction(); // 调用共享的函数
return 0;
}
```
通过在functions.h中使用`extern`关键字声明函数,并在其他源文件中定义该函数,可以在file2.c中使用`extern`关键字来引用共享的函数。
总而言之,虽然在.h文件中使用`extern`关键字不是必需的,但它可以显式地声明函数是在其他源文件中定义的,从而帮助确保在多个源文件中共享函数时不会引起重复定义错误。这样可以提高代码的可读性和可维护性。