您的位置 首页 电源

51笔记2:keil中树立多个c文件时,变量重复界说

cc++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。

c/c++言语中有许多当地要用到extern,可是假如没有真实的了解它的含义,会给编程带来很大的费事,为了使咱们少走弯路,特祥细的阐明一下。

关于比较小的程序,一般只要一个c文件和一个头文件,大局变量咱们通常会直接界说在c文件中,在程序之前加int i界说。假如要在头文件中界说有以下两种办法:用extern来声明:extern int i;这一句仅仅对变量i进行声明,在c文件的程序之前有必要加上int i进行界说。extern int i=0;这一句声明和界说都做了。
关于大一点的程序,有许多c文件和头文件,这个时分大局变量就有必要在头文件中声明(不需求初始化),然后在一个c文件中界说(该初始化的要初始化)。假如在头文件中界说,则编译的时分会呈现重复界说的过错。假如只要头文件中声明就会呈现没有界说有正告。
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: K
MODULE: 222.obj (222)
呈现上述过错则是由于变量k重复界说,把你的头文件中的变量界说前加extern(仅仅变量声明不必初始化),再在某一个你要调用该变量的c文件的程序之前再界说(留意第一个调用的c文件要担任顺便初始化该变量,其他调用的c文件就不需求初始化进程啦)一下就可以了。

要想深化了解extern的效果的话,仍是需求了解一些编译原理的东西
咱们一般说的编译(build),其实是两个进程,第一个进程称为编译(compile),第二个进程是链接(link)编译的单位是文件,即单个的C文件,因而即便一个变量没有界说就运用了,编译器是不会报错的,编译器以为这个变量应该是在其它文件中被界说了,先作为一个符号放这儿,等一会儿再说。而在链接的阶段,链接器就要处理这些跨文件的符号(包含变量、函数等),假如在其它文件中找到了,且是唯一被界说的,就把一切文件中具有大局效果域的同一符号链接为一个东西。
所以,在多个文件的情况下,假如有大局变量需求在多个文件中运用,只需求在一个文件中界说它,在其它文件中运用extern声明一下就可以了,加了extern的意思是显式的告知编译器,这个变量是在其它文件中被界说的,在编译的时分你略过就可以了,链接器会处理好的,这样编译器就不会报错了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/257335.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部