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

  • 时间:
  • 来源:互联网
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31869107/article/details/103455670

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

本文链接http://element-ui.cn/news/show-696.html