浅谈C语言中的强符号、弱符号、强引用和弱引用
首先我表示很悲剧,在看《程序员的自我修养--链接、装载与库》之前我竟不知道C有强符号、弱符号、强引用和弱引用。在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样感觉的朋友交流也希望高人指点。
首先我们看一下书中关于它们的定义。
引入场景:(1)文件A中定义并初始化变量i(inti=1),文件B中定义并初始化变量i(inti=2)。编译链接A、B时会报错b.o:(.data+0x0):multipledefinitionof`i';a.o:(.data+0x0):multipledefinitionof`i'。(2)在文件C中定义并初始化两个变量i(inti=1;inti=2),编译链接时会报错c.c:2:5:error:redefinitionof‘i';c.c:1:5:note:previousdefinitionof‘i'washere。
强符号:像场景中这样的符号定义被称为强符号,对于C/C++来说,编译器默认函数和初始化的全局变量为强符号。
弱符号:接上文,为初始化的全局变量为弱符号。
编译器关于强弱符号的规则有:(1)强符号不允许多次定义,但强弱可以共存;(2)强弱共存时,强覆盖弱;(3)都是弱符号时,选择占用空间最大的,如选择double类型的而不选择int类型的。
由以上定义所以有我之前没有想到的场景:
代码a.c:
1inti=2;
代码b.c:
#include<stdio.h>
inti; intmain(intargc,char**argv) { printf("i=%d\n",i); return0; }
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短