C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++全局变量

EasyC++全局变量

作者:梁唐

这篇文章主要介绍了EasyC++全局变量

文章转自公众号:Coder梁(ID:Coder_LT)

全局变量:

前面聊到了静态持续变量的链接性,其中链接性为外部的变量通常简称为外部变量。它们的存储持续性为静态,作用域为整个程序。外部变量是在函数外部定义的,因此对于所有的函数而言都是外部的。因此外部变量也被称为全局变量。

关于外部变量,C++当中有一个单定义规则:变量只能有一次定义。

这句话看起来有些难以理解,为了理解它,我们需要厘清C++当中的两种变量声明。一种是定义声明简称为定义,它给变量分配存储空间。另外一种是引用声明,简称为声明,它不给变量分配存储空间。因为它表示引用一个已有的变量。

引用声明使用关键字extern,并且不进行初始化。否则会被视为是定义,而非声明。

double up;
extern int blue;
extern char ch = 'z';


上面的例子当中,第一行和第三行为定义声明,因为第一行没有加关键字extern,而第三行的变量进行了初始化。

可能到这里还是有些难以理解,其实extern是为了引入其他文件创建的变量。如果我们不加extern,表示在当前文件当中创建一个全局变量,而加上了extern表示引入其他文件创建的全局变量。外部链接性的全局变量虽然是整个程序都可使用的,但跨文件使用时,需要手动使用extern声明。

没有通过extern声明的其他文件的全局变量也是无法使用的。

当我们同时使用局部变量和全局变量的时候会发生什么呢?比如下面这段代码:

// file1
double warning = 3.0;

// file2

extern double warning;

void test() {
    double warning = 5.0;
    cout << warning << endl;
}

在这段代码当中, 我们在file1中创建了变量warning,在file2当中声明了这个全局变量。并且在test函数当中又定义了一个新的double类型的变量也叫做warning,那么问题来了,当我们使用cout输出的时候,究竟得到的结果会是什么呢?

答案很简单,得到的结果是5.0。因为当同时使用同名的局部变量和全局变量时,局部变量将隐藏全局变量。

那么全局变量和局部变量究竟应该使用哪一种呢?

很明显,全局变量非常方便,使用全局变量可以免去很多参数传递的过程,大大简化了编码的难度。但如果是在大型的工程当中,使用全局变量则是一个非常危险的行为。因为全局变量人人都能访问,我们很难保证数据的准确性,会不会遭遇不可知的更改,排查的时候也更加困难。而使用局部变量,参数传递的链路是清晰的,debug的时候会容易许多。

在我们日常的算法联系当中,并不存在数据不可靠的问题。使用全局变量可以简化许多数据结构的实现过程,尤其是一些相对复杂的数据结构。我认识的所有算法竞赛的大牛,都非常喜欢使用全局变量。所以到底该用哪个并不是固定的,要根据我们的实际需要进行选择。

到此这篇关于EasyC++全局变量的文章就介绍到这了,更多相关C++全局变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文