C++使用全局变量

本文介绍了如何在C++中正确使用全局变量,强调在.h文件中通过extern关键字声明,但不在头文件中初始化。内容涉及头文件的包含和全局变量的作用域管理。
如果在在多个.cpp文件中都要用到某个变量,那么这个变量就是全局变量。

首先,在.h文件中声明这个变量,加上extern关键字,但是不能给变量赋值。比如在头文件a.h中这样写:

#ifndef _A_H
#define _A_H
extern int global;
#endif
在main()函数所在的文件种定义这个全局变量,可以初始化。

#include <iostream>

using namespace std;

void f1();
void f2();
int global;

int main()
{
    global = 1234;
    f1();
    f2();
    cout<<"main:global="<<global<<endl;
    return 0;
}
在main()函数中还声明了两个函数f1()和f2(),它们分别在a1.cpp和a2.cpp这两个文件中定义。在这两个文件中都用到了global这个全局变量,所以在这两个文件中要include头文件a.h

/*a1.cpp*/

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

void f1()
{
    global = 1111;
    cout<<"f1:global="<<global<<endl;
}
/*a2.cpp*/

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

void f2()
{
    global = 2222;
    cout<<"f2:global="<<global<<endl;
}
最后,同时编译a.cpp,a1.cpp,a2.cpp这3个文件
g++ -W a.cpp a1.cpp a2.cpp -o a
运行
./a
结果如下:
f1:global=1111
f2:global=2222
main:global=2222
### C++全局变量使用方法 在C++编程语言里,全局变量是在所有函数之外声明的变量,这意味着它们的作用范围是从定义的地方一直到文件结尾。这种特性使得全局变量可以在程序的不同部分之间共享数据[^4]。 #### 定义与初始化 全局变量通常被放置于源文件(.cpp)顶部或头文件(.h),并可在多个编译单元间访问。当在一个单独的实现文件中定义了一个全局变量之后,其它想要使用的文件则需利用`extern`关键字来声明这个外部链接的数据对象[^3]: ```cpp // file1.cpp #include "file1.h" int aa = 0; // main.cpp #include "stdafx.h" #include "file1.h" extern int aa; aa = 89; // 修改来自另一个文件中的全局变量 'aa' ``` 上述例子展示了如何跨不同文件管理同一个全局整型变量 `aa` 的值。 ### 使用注意事项 为了避免潜在错误以及提高代码质量,在处理全局变量时需要注意以下几个方面: - **避免重复定义**:如果存在相同名称但在不同命名空间内的全局变量,则可能导致混淆和意外行为。例如,当试图打印某个特定的全局变量时可能会得到意想不到的结果[^5]。 ```cpp namespace MyName { extern int g_Inta; } #define LOG_INFO(...) \ do { \ char buf[1024]; \ snprintf(buf, sizeof(buf), __VA_ARGS__); \ printf("[%s:%d]%s\n", __FILE__, __LINE__, buf); \ } while (false) LOG_INFO("%d", g_Inta); ``` - **防止不必要的修改**:对于那些不应轻易改变状态的静态全局变量尤其要小心对待;任何对其直接操作都可能破坏应用程序逻辑的一致性和稳定性。 - **局部优先原则**:一旦在同一作用范围内既存在同名的局部变量又存在全局变量的情况下,那么局部版本将会覆盖掉后者的影响[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值