c++ 全局变量 静态全局变量

全局变量是静态存储方式, 静态全局变量也是静态存储方式,这两者在存储方式上并无不同。

区别:

虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,静态全局变量在各个源文件中都是有效的。

静态局部变量则限制了其作用域, 只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态局部变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

///a.h
#ifndef A_H_INCLUDE
#define A_H_INCLUDE

extern int a;
int b;

#endif // a_h_include
///a.cpp
int a = 10;

///main.cpp
#include <iostream>
#include "a.h"
using namespace std;
///main.cpp
#include <iostream>
#include "a.h"
using namespace std;

int main()
{
    cout << a;
    return 0;
}

编译成功,输出 10 

在a.cpp中,用static修饰a

编译无法通过

 undefined reference to `a'  -----> 未定义对“ a”的引用

可以看出被static修饰的全局变量,的作用域只在源文件的范围

而非静态全局变量,则可以整个源程序文件中使用

 推荐一篇博客:https://blog.csdn.net/qq_22238021/article/details/79533711?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1

写的很好

猜你喜欢

转载自www.cnblogs.com/LIN-JW/p/12659559.html