C头文件中的全局变量初始化 [英] Global variables initialization in C header file
本文介绍了C头文件中的全局变量初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道为什么在包含在C的多个源代码中的头文件中声明全局变量是可行的
#ifndef INC_MAIN_H_
#define INC_MAIN_H_
int my_var;
#endif
但是为其分配默认值不起作用:
#ifndef INC_MAIN_H_
#define INC_MAIN_H_
int my_var = 0;
#endif
它在我包含此主机的每个文件中显示多个编译错误。h
多个`my_var‘定义;app/src/testfile.o:app/inc/main.h:4:在此首次定义
我知道以这种方式声明全局变量不是最佳做法,但我不明白为什么添加赋值会导致编译错误,并且找不到明确的答案。
推荐答案
使用您正在使用的构建工具和开关,int my_var;
主要充当不是定义的声明。允许多个对象标识符声明。
int my_var = 0;
是一个定义。应该只有一个定义。
由于C的使用和开发历史,int my_var;
从技术上讲是一个暂定定义。如果翻译单元中没有my_var
的常规定义(正在编译的源文件,包括它包含的所有文件),它将充当常规定义。
-fcommon
请求旧行为。
为了避免暂定定义,您应该在头文件中将标识符声明为extern int my_var;
,这只是一个声明,而不是暂定定义,并且您应该正好有一个包含int my_var = 0;
的源文件,这是常规定义,而不是暂定定义。
这篇关于C头文件中的全局变量初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文