extern的总结

在刚接触的项目中,同事对extern的使用错误导致我冤枉花了近4个小时去发现错误,痛心啊,

总结下extern的使用吧:

 

    extern用在变量和函数在别的文件中需要调用时

 

1:变量

 

在一个源文件里定义了一个数组: char a[6];

 

在另外一个文件里用下列语句进行了声明:  extern char *a;

 

请问,这样可以吗?

答案与分析:   不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。

 

2: 函数

 

       1: 在函数对应的头文件中extern外部要用到的函数,外部调用头文件就OK,但尽量避免这样,因为头文件包

含了太多东西

      2: 如果函数func定义在a.c里面,在b.c里面incude "a.c" 就可以调用

      3: 对1 所作分析怀疑,经过测试发现(环境redhat 9.0),函数都编译的话好像可以直接使用另一个文件的函数,除非它static了,是链接的时候调用的吗?

 

对观点1的总结            : extern的使用地方,觉得在头文件中extern和在需要用到的文件中extern相比,后者更人性,前者更简洁
对观点 2 和 3 的总结  : 如果链接的时间不一样,可能就不奏效了


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值