软件设计:多个源文件共享同个变量的方法

    作者:孔实更新于: 2020-04-15 15:12:38

      源文件一般指用汇编语言或高级语言写出来的代码保存为文件后的结果,源文件是相对目标文件和可执行文件而言的。源文件就是用汇编语言或高级语言写出来的代码保存为文件后的结果。

      extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找

      其定义。

      另外,extern也可用来进行链接指定。

      用法分析:

      在一个变量前加extern比如:externunsignedintTest;

      编译器编译的时候,会把Test当成是外部的!会在其他地方寻找Test这个变量的定义,如果只加extern那么编译器就会报错!

      比如这样:

      1>main.obj:errorLNK2001:无法解析的外部符号"intTest"(?Test@@3HA)

      1>E:\\wtl\\test\\test\\debug\\test.exe:fatalerrorLNK1120:1个无法解析的外部命令

      因为extern关键字只是说明我们从外部引用了一个变量,该变量的值叫Test,提醒编译器要到其他文件中查找该变量!

      要想不报错,在其他文件加intTest定义一个名字叫Test的变量吧。这样就能编译通过。

      那么假设我有个main.c,source1.c,source2.c那么我想要在main里面定义一个变量,在source1.c跟source2.c都能使用该如何做?

      很简单,先在main.c中定义一个值:intdata;

      那么在两个点c文件中都加上:externintdata,

      这个变量能被这三个.c文件共用了,相当于一个全局变量。

      示例代码:

      //Main.c

      #include

      #include"source1.h"

      #include"source2.h"

      intdata;

      usingnamespacestd;

      voidmain()

      {

      data=4;

      adddata2();

      cout<

      adddata1();

      cout<

      cout<<"helloworld"<

      }

      //Source1.c

      #include"source2.h"

      usingnamespacestd;

      externintdata;

      voidadddata2()

      {

      data=data+10;

      }

      //Source.h

      #ifndef__SOURCE1_H__

      #define__SOURCE1_H__

      #include

      voidadddata1();

      #endif

      //Source2.c

      #include"source1.h"

      usingnamespacestd;

      externintdata;

      voidadddata1()

      {

      data=data+100;

      }

      //Source2.h

      #ifndef__SOURCE2_H__

      #define__SOURCE2_H__

      #include

      voidadddata2();

      #endif

      多个c文件共享同一个变量(全局变量)

      当你声明一个变量的时候是这样unsignedintdata=0;

      当你在另一个源文件中想使用这个变量的时候。

      只需要加关键字:externunsignedintdata;

      (注意,这只是说明这个data是外部的变量,实际上并不分配存储空间的。也就是不能初始化!)

      源文件是相对目标文件和可执行文件而言的。

      源文件就是用汇编语言或高级语言写出来的代码保存为文件后的结果。

      目标文件是指源文件经过编译程序产生的能被cpu直接识别二进制文件。

      可执行文件就是将目标文件连接后形成的可执行文件,当然也是二进制的。

课课家教育

未登录