前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >警惕:头文件中的static变量

警惕:头文件中的static变量

原创
作者头像
村子里的设计师
修改2023-05-20 20:26:56
1.5K0
修改2023-05-20 20:26:56
举报
文章被收录于专栏:程序设计a程序设计a

如何理解static变量

如果说 全局变量“不受时间和空间限制”,那static变量是“不受时间限制,但受空间限制”。“不受时间限制”是指到程序运行结束时才释放,“受空间限制”是指 仅能在特定的作用域中使用。

照此理解,应优先考虑使用static变量而非全局变量,前者“权限”更小,更安全。

头文件中的static变量

头文件中的全局变量,可以被引用该头文件的源文件共享;而头文件中的static变量,不能被引用该头文件的源文件共享,这些源文件中的同名static变量彼此独立。下面是一个代码示例。

代码示例

main.cpp

代码语言:javascript
复制
#include "test1.h"
#include "test2.h"

int main(){
        func1();
        func1();
        func2();
        func2();
        func1();
        func2();
        return 0;
}

static.h

代码语言:javascript
复制
#ifndef __STATIC_H
#define __STATIC_H
static int var = 1;

#endif

test1.h

代码语言:javascript
复制
#ifndef __TEST1_H
#define __TEST1_H

void func1();

#endif

test1.cpp

代码语言:javascript
复制
#include <iostream>
#include "static.h"

void func1(){
        var += 10;
        std::cout << "in test1::func1 : var = " << var << std::endl;
        return;
}

test2.h

代码语言:javascript
复制
#ifndef __TEST2_H
#define __TEST2_H

void func2();

#endif

test2.cpp

代码语言:javascript
复制
#include <iostream>
#include "static.h"

void func2(){
        var += 1;
        std::cout << "in test2::func2 : var = " << var << std::endl;
        return;
}

运行结果

代码语言:javascript
复制
$ ./main
in test1::func1 : var = 11
in test1::func1 : var = 21
in test2::func2 : var = 2
in test2::func2 : var = 3
in test1::func1 : var = 31
in test2::func2 : var = 4

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何理解static变量
  • 头文件中的static变量
  • 代码示例
  • 运行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com