个人理解—链接属性

        编译:为了将函数与变量变为二进制(.o文件)。

        链接是为了将独立的函数链接起来形成一个整体,形参一个.o文件。

        编译工作以文件为单位(编译时a.c不去管b.c,所以要进行声明);链接以工程为单位,将编译成此的单个.o文件整体链接为一个可执行文件。链接是将彼此的全局与函数相链接。

        链接可分为外链接、内链接和无链接。

        1.外链接:在整个程序范围内进行链接(可跨文件)。例如:全局变量与一般函数具有唯一性。

        2.内链接:c文件内部链接每一个.c生成一个.o文件,在当前范围内链接(不跨文件)。例如:static修饰的函数/全局变量。

        3.无链接:代表这个符号本身不参与链接。例如:所有的局部变量,包括(static局部变量和auto)。

        全局变量与函数不可出现同名的根本性原因在于外部链接,外部链接的性质决定了其唯一性。

        所以在高级语言中,有了namespace。——加前缀。

        在C语言中,可以将明显不会在别的文件中使用的全局变量用static修饰,变为内链接的全局变量,一定程度上解决了这个问题,但不太灵活。

        所以也就决定了C语言写大程序很可能。

        static的两种用法:

        1.改存储类型-针对局部变量(数据段、bss段)。

        2.改链接属性-针对全局变量(内链接)。

        所以在明显不会在其文件使用的全局变量,尽量使用static进行声明。

        使用extern明确声变量为明外链接。

        全局变量不能放在.h中,不然会出现重复定义,也不能在其中进行函数定义,理由就是在两个文件中进行同一全局类型数据初始化时,会出现err。

        存储类决定了生命周期;作用域决定了链接属性。

        宏与inline函数为无链接类型,inline在编译时是直接展开的,不用链接,宏也是直接展开(预处理时进行)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值