博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer Plus学习笔记 第九章 单独编译 变量作用于和连接性, 静态变量,静态外部变量,静态内部变量
阅读量:4127 次
发布时间:2019-05-25

本文共 2235 字,大约阅读时间需要 7 分钟。

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

头文件中包含的内容:

#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 
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 
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 
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
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"; }

转载地址:http://qjepi.baihongyu.com/

你可能感兴趣的文章
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>