C\C++_变量_静态存储的变量

1. 静态存储的变量概述

说明:静态存储是在程序整个运行时间都存在的

变量类型作用域范围生命周期如何声明
静态,无链接性函数内有效程序运行期间在代码块中,使用static关键字
静态,内部链接性本文件内有效程序运行期间不在任何函数内,使用static关键字,cpp文件间不能共用
静态,外部链接性其它文件可引用程序运行期间不在任何函数内,cpp文件间可以共用

2. 定义方式

2.1 静态、外部链接性

  • 其它文件中引用声明使用关键字extern,且不进行初始化;否则声明为定义,导致分配存储空间
    例如:
    double up; //< 定义,编译器并初始化为0
    extern int blem; //< 其它文件已定义
    extern char gr = ‘z’; //< 定义,因为初始化了

2.2 静态、内部链接性

背景:是同一个工程不同文件中,不能出现两次一样的同名变量的定义,除非使用static

代码示例

//! 背景:创建项目的时候,新建了文件file01.h	文件A.cpp   文件B.cpp三个文件
文件:file01.h
#ifndef FILE01_H_
#define FILE01_H_

static int CST_MAX = 20;		//<	同一个工程中多个cpp文件都包含了file01文件,从而导致多个文件都分别定义了CST_MAX该变量,
								//<	加上static关键字,则使得每个cpp的CST_MAX只有内部链接效果,无外部链接效果
#endif	//< FILE01_H_

文件:A.cpp
#include "file01.h"

文件:B.cpp
#include "file01.h"

问题原因:上述文件A和B源文件中分别都包含了文件file01.h,文件A和文件B没有任何关联,属于同一个工程中重复定义了CST_MAX变量两次,所以报错
解决方案:在file01.h文件中的CST_MAX前面加上关键字static即可,让该变量成为每个文件内部链接性(即作用域限定本文件),而无外部链接性

多文件程序中的const限定符

  • 结论1:头文件中const 限定的常量后,由多个cpp文件引用,本质是内部链接的,即各自的cpp文件中的const变量是相互独立的,所以不需要加static关键字修饰

  • 结论2:如果要想将const限定的常量变为外部链接的,则使用限定符extern,一个源文件中extern const int a = 10定义; 其它源文件中声明使用即可extern const int a; 则代表他们共用1个const常量

3. 参考书籍

C++ Primer Plus(第6版)9.2.5
C++ Primer Plus(第六版)——9.2.7 说明符和限定符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值