刚试出的extern一些以及联想到的,记录以备不忘

 

1、

学c的时候,接触过extern,没深入研究,直到最近看c++编程思想,看到178页extern const int x=100;

对extern进行测试,首先test2.cpp如下内容

然后test.cpp

 

 


不过由于有第2行,所以实际上加入不加入extern都是可以的

然后删掉#include "test2.cpp"和extern语句,在命令行下g++ test2.cpp test.cpp -o test 之后,会出现警告如下

 

(对文件的连编,直接在工程里添加文件或者用g++连编都可以)

将extern语句加上就好了

 

2、

至于const int x 的extern

测试如下

text2.cpp

test.cpp

不对x进行cout则能通过,不会报错

在test2.cpp中改为


即可。

而在c语言中,则不需要对const进行extern,测试如下:

test2.c中

test.c中

可以输出结果为100。可以看到在C++中必须在定义处加上extern才能编译并运行,为什么呢?

 

      这涉及C和C++对const的不同处理

  在c中,默认const为外部连接,而C++默认const是内部连接,所以如果在C++中想完成C中同样的事情,必须用extern明确把连接改为外部连接(当然,在C语言中也可以这样)

  因为C++的const默认内部连接,所以不能一个文件定义const而在另一个文件中又把它作为extern来引用。为了使const成为外部连接,必须定义为extern,此处我们在test2.cpp中改为

就通过进行初始化并指定为extern,我们强迫给这个const分配了内存。(因为const在C++中不必创建内存空间,是否创建依赖于它的使用。一般来说,一个const仅仅用来把名字用一个值替代,如同#define,则存储空间就不必创建,如果取一个const的值得或者把它定义为extern,则会为该const创建内存空间。)

 

3、

   说到const默认为局部变量,想到个static的局部性

  stati有个优点,在函数范围之外,不可用,所以不能轻易改变,这样错误就局部化了。C++编程思想70页示范代码:

static另一个作用,在某个作用域外不可访问。

test2.cpp内容如下:

test.cpp如下:

 

(这里也可以将两个文件的extern和static互换,结果一样)

会得到编译错误,尽管变量fs被声明为extern不过定义为static,同样文件外不可用

即:当static被应用于函数名和所以函数外部的变量时,文件的外部不可以使用这个名字。函数名或变量是局部于文件的,即有文件作用域

 

好,记完,只供自己参考

 

另外,参考下

http://blog.csdn.net/hangyu628/archive/2009/01/29/3854487.aspx

 

参考网址

1、http://blog.csdn.net/keensword/archive/2005/06/23/401114.aspx

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值