如何正确初始化全局变量? [复制]

2023-11-23

我正在编写一个小学生项目,并遇到了一个问题,我有一些全局变量,需要在一些源文件中使用它,但我收到错误对变量名的未定义引用。例如,我们创建三个源文件:

tst1.h:

extern int global_a;
void Init();

tst1.cpp:

#include "tst1.h"
void Init(){
  global_a = 1;
}

tst2.cpp:

#include "tst1.h"
int main(){
  Init();
}

当我编译和链接时,这就是我得到的:

$ g++ -c tst1.cpp 
$ g++ -c tst2.cpp 
$ g++ tst2.o tst1.o
tst1.o: In function `Init()':
tst1.cpp:(.text+0x6): undefined reference to `global_a'
collect2: error: ld returned 1 exit status

如果我删除extern声明,然后我得到另一个问题,让我展示:

$ g++ -c tst1.cpp 
$ g++ -c tst2.cpp 
$ g++ tst2.o tst1.o
tst1.o:(.bss+0x0): multiple definition of `global_a'
tst2.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

我确实需要一些全局变量,例如我的小项目使用汇编代码,并且有一个像字符串 rax = "%rax %eax %ax %ah %al";应该通过不同的源文件引用。

那么,如何正确初始化全局变量呢?


您只声明了变量但没有定义它。这条记录

extern int global_a;

是声明而不是定义。要定义它,您可以在任何模块中编写

int global_a;

或者最好按以下方式定义函数 init

int Init { /* some code */; return 1; }

并在主模块中的函数 main 之前编写

int global_a = Init();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确初始化全局变量? [复制] 的相关文章

随机推荐