extern使用注意事项与语法简述

1.使用extern时要严格对应声明的格式,定义的是数组类型,extern char a[];而不能是extern char *a;

2.如果要在*.c文件中引用另一个文件中的一个全局变量,那就应该放在*.h中用extern来声明这个全局变量。

3.函数声明和定义前面extern没有实际的意义(除非不想在对应头文件声明——省略头文件),如果该函数不想被调用可以添加static关键词

4.根据编译器不同,有些编译器可以链接(extern)常量:const float pi = 3.14;  extern const flaot pi;

5.extern 可以链接外部变量,当我们两个文件同时引用同一个全局变量的时候,只在一个文件定义,编译时会在未定义的文件报错;在两个文件都定义,编译通过,链接时会包定义冲突的错误,解决办法就是其中一个文件定义,另一个文件extern来告诉编译器这个变量在其他文件定义过了,自个儿去找(^..^)。当然也可以通过头文件的方式来实现,变量定义在头文件,连个引用变量的.c文件均include有该头文件。

6.extern "c",在C++的环境,想要兼容C,一般都是需要extern "C"。格式:

#ifdef __cplusplus

#if __cplusplus

extern "C"{

#endif

#endif /* __cplusplus */

//.h文件结束的地方

#ifdef __cplusplus

#if __cplusplus

}

#endif

#endif /* __cplusplus */

原因是虽说C++兼容C,但是由于C++具有面向对象的特性,所以假设没有加上extern "C",而C++语法支持函数重载的原因,C++编译器函数编译后会有类似_foo_int_float_..这样带有变量参数之类的名字(函数重载实现的原理),而C的编译器则会生成_foo这样的名称,所以在链接函数引用的时候会报错(编译后生成的名称都不一样如何引用C模块的函数).

参考:https://baike.baidu.com/item/extern/4443005?fr=aladdin

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值