全局变量前加extern与不加extern的作用
时间: 2023-11-21 11:13:25 浏览: 65
全局变量前加`extern`关键字的作用是声明该变量是在其他地方定义的,告诉编译器该变量在当前文件中是一个外部变量。这样,在当前文件中使用该全局变量时,编译器会在连接阶段去找到真正的定义。
不加`extern`关键字的全局变量声明会默认认为是定义,如果在多个文件中都包含了该全局变量的定义,会导致重复定义的错误。
总结起来,加上`extern`关键字可以使得全局变量的声明与定义分离,在多个文件中共享同一个全局变量的定义。而不加`extern`关键字则会导致多个文件中都有该全局变量的定义,从而引发重复定义的错误。
相关问题
全局变量可以省略extern吗
全局变量可以省略extern关键字,因为全局变量的声明默认就是extern类。在C++中,如果在一个文件中声明了一个全局变量,其他文件中可以直接使用该全局变量,而无需再次声明。下面是一个示例:
```cpp
/* Demo.h */
#pragma once
extern int a; // 声明全局变量a
/* Demo.cpp */
#include "Demo.h"
int a = 10; // 定义全局变量a并赋值为10
/* main.cpp */
#include "Demo.h"
#include <iostream>
int main() {
std::cout << "a = " << a << std::endl; // 输出:a = 10
return 0;
}
```
在上面的示例中,全局变量a在Demo.cpp文件中定义并赋值为10,然后在main.cpp文件中使用了该全局变量a,而无需再次声明。这是因为在Demo.h文件中已经声明了全局变量a,并且默认是extern类。
函数声明前加extern的作用
在 C 语言中,`extern` 关键字用于声明一个全局变量或函数,以指示该变量或函数是在其他源文件中定义的。
当在一个源文件中使用 `extern` 关键字声明一个函数时,它告诉编译器该函数的定义在其他源文件中,并且在链接期间会进行连接。
例如,在源文件 a.c 中定义了一个函数 `abc()`,而在源文件 b.c 中需要调用该函数。可以在 b.c 文件中使用 `extern` 关键字来声明 `abc()` 函数,如下所示:
```c
// b.c
extern void abc(); // 声明函数 abc(),告知编译器该函数的定义在其他源文件中
int main() {
abc(); // 调用 abc() 函数
return 0;
}
```
通过使用 `extern` 关键字,告知编译器在链接阶段会找到 `abc()` 函数的定义。这样,编译器就能够正确地进行类型检查和生成可执行文件。
需要注意的是,如果函数声明和定义在同一个源文件中,不需要使用 `extern` 关键字。`extern` 主要用于在一个源文件中声明另一个源文件中定义的函数或变量。