C++ Primer Plus学习笔记 第九章 单独编译 变量作用于和连接性, 静态变量,静态外部变量,静态内部变量

程序包含三部分(嗯,对 我就是这么懒)

头文件中包含的内容:

#include 后面使用“”而不是<> 因为如果是<>则编译器回去标准目录查找文件, ""则会先在当前工作目录查找

不要将头文件加入到项目列表中, 也不要在源代码文件中使用#include来包含其他源代码文件

关于头文件的多次include的问题

多文件编译:

g++ cpp1, cpp2, cpp3.... -o file.exe(名字自己取)

C++ 4种不同的方法来存储数据

register 寄存器变量标识 嗯。。现在好像没啥用了

静态变量:

3种连接性, 外部链接性,内部连接性,无连接性

外部链接性: 不加static ------------------int global = 1000; int main(){...}

内部连接性: 加static ---------------static int global = 1000; int main(){....}

无连接性: void functl(int n){static int count = 0;}

外部连接性静态持续变量: 其他文件也可以访问

内不连接性静态巴拉巴拉:当前文件中访问

无连接巴拉巴拉: 当前代码块中访问

静态变量的初始化:

一般情况下是静态初始化,就是直接零初始化,然后如果程序员有显式的初始化,则再赋值过去。如果有一些简单计算的话。编译器就给他算掉再初始化。但是如果碰到带其他函数的复杂的表达式初始化。则执行动态初始化。也就是等待该函数被连接且执行的时候。

单定义规则:

C++ 要求在每个使用外部变量的文件中都要声明它, 但是单定义规则指出,变量只能有一次定义。

咋办? 关键字extern 来表示已经被定义过但是需要在本文件中声明的变量

file1.cpp

int a = 11;

file2.cpp

extern a;

cout << a;

程序示例:

extemal.cpp

#include <iostream>
using namespace std;
double warming = 0.3;
void update(double dt);
void local();

int main()
{
  cout << "Global warming is " << warming << " degrees.\n";
  update(0.1);
  cout << "Global warming is " << warming << " degrees.\n";
  local();
  cout << "Global warming is " << warming << " degrees.\n";
  return 0;
}
support.cpp

#include <iostream>
extern double warming;

void update(double dt);
void local();

using std::cout;
void update(double dt)
{
  extern double warming;
  warming += dt;
  cout << "Updating gloabal warming to " << warming;
  cout << " degrees.\n";
}

void local()
{
  double warming = 0.8;
  cout << "Local warming = " << warming << " degrees.\n";
  cout << "But global warming = " << ::warming;
  cout << " degress.\n";
}

运行结果:

‘::’符号是指明使用全局变量warming

 

 

如果在一个文件中想要重新定义一个与外部变量同名的名称 只需要加上static关键字即可 编译器会隐藏外部变量

代码示例;

// twofile1.cpp

#include <iostream>
int tom = 3;
int dick = 30;
static int harry = 300;
void remote_access();

int main()
{
  using namespace std;
  cout << "main() reports the following addresses:\n";
  cout << &tom << " = &tom, " << &dick << " = &dick, ";
  cout << &harry << " = &harry\n";
  remote_access();
  return 0;
}

// twofile2.cpp

#include <iostream>
extern int tom;
static int dick = 10;
int harry = 200;

void remote_access()
{
  using namespace std;
  cout << "remote_access() reports the following addresses: \n";
  cout << &tom << " = &tom, " << &dick << " = &dick, ";
  cout << &harry << " = &harry\n"; 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@凌晨三点半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值