extern variable has an initializer怎么消除
时间: 2024-10-17 13:11:17 浏览: 78
在C/C++语言中,`extern`变量通常用于声明但在其他文件中定义。如果`extern`变量有初始化值,通常是因为你在头文件中声明了变量并赋予了初始值,而在实现文件中又进行了再次声明但未提供新的初始化。要消除这种现象,你可以:
1. **只在单个源文件中声明并初始化**:将包含初始化的`extern`变量声明移至源文件(cpp文件)中,并保证它只被那里使用。在头文件中只做声明,不指定初始化。
```cpp
// .cpp 文件 (如 foo.cpp)
extern int myVar = 42; // 只在这里初始化
// .h 文件 (如 foo.h)
extern int myVar;
```
2. **提供一致的全局初始化**:如果需要在整个程序中共享这个值,可以在链接时提供一次初始化,比如使用预处理器宏或者配置文件。
```cpp
// 在项目的某个入口点,如main函数前
# define GLOBAL_INIT MyVar 42
int myVar = GLOBAL_INIT;
```
3. **使用常量或静态变量**:如果值不会改变,可以考虑使用`const`或`static`关键字,它们会自动在内存中初始化。
```cpp
const int myVar = 42; // 使用const避免修改
```
相关问题
'extern'variable has an initializer
在C语言中,"extern"关键字用于声明一个外部变量,并且可以给外部变量赋初值。
当您在一个源文件中使用"extern"关键字来声明一个变量时,它表示该变量是在其他源文件中定义的,并且可以在当前源文件中使用。在声明该变量时,您也可以给它赋初值。
以下是一个示例:
假设我们有两个源文件:main.c和globals.c。
在globals.c中定义一个外部变量:
```c
int globalVariable = 10;
```
在main.c中使用该外部变量:
```c
extern int globalVariable;
```
您可以选择在声明时给该外部变量赋初值:
```c
extern int globalVariable = 20;
```
这样,当您在main.c中使用该外部变量时,它将具有初始值20。
请注意,如果在globals.c中已经对该外部变量进行了初始化,那么在main.c中使用"extern"来声明并初始化该变量是不必要的。
希望这个例子能解答您的问题!如果您还有其他问题,请随时提出。
'extern' variable has an initializer [-Wextern-initializer]
这个编译警告是因为在声明一个 extern 变量时给它赋了一个初始值。extern 变量是在别的文件中定义的全局变量,本文件中只是声明它的存在,不应该给它赋值。
如果你需要在本文件中使用这个变量的初始值,可以将这个变量定义在本文件中,并且在定义时同时初始化它。如果你只是想使用这个变量,不需要定义它,只需要在本文件中声明它即可。例如:
```
// 在其他文件中定义的全局变量
extern int global_var;
// 在本文件中声明全局变量的存在
extern int global_var;
// 在本文件中定义全局变量并初始化
int global_var = 10;
```
阅读全文