C++编程思想 第1卷 第10章 名字控制 来自c语言中的静态元素 控制连接 冲突问题

一般情况下,在文件作用域 file scope 内的所有名字对程序中的所有翻译
单元来说都是可见的

这就是外部连接 external linkage,因为在连接时这个名字对连接器来说是
可见的,对单独的翻译单元来说,是外部的

有时可能想限制一个名字的可见性。想让一个变量在文件范围内是可见的,这样
这个文件中的所有函数都可以使用它,但不想让这个文件之外的函数看到或
访问该变量,或不想这个变量的名字与外部的标识符相冲突

在文件作用域内,一个被明确声明为static的对象或函数的名字对翻译单元
来说是局部于该单元的

内部连接的一个好处是这个名字可以放在一个头文件中而不用担心连接时发生
冲突。

那些通常放在头文件里的名字,如常量、内联函数,在默认情况下都是内部
连接的

所有的全局对象都是隐含在静态存储的

int a = 0
a被存储在程序的静态数据区,在进入mian()函数之前,a已经初始化了

一旦进入局部变量,static就不会再改变变量的可见性,只是改变变量的
存储类型

如果把局部变量声明为extern,这意味着某处已经存在一个存储区

 

//: C10:LocalExtern.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
//{L} LocalExtern2
#include <iostream>

int main() {
  extern int i;
  std::cout << i;
  getchar();
} ///:~


//: C10:LocalExtern2.cpp {O}
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
int i = 5;
///:~

static和extern只会改变它们的可见性

输出
5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值