锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

关于模块化编程extern用法

时间:2024-04-30 00:07:09

 用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用

  举例说明:项目文件夹project下有main.ccommon.ccommon.h三个文件,其中common.h文件分别#includemain.ccommon.c文件中。现在希望声明一个字符型变量key,在main.ccommon.c中公用。如下图所示:


  有人想,既然是想两个文件都用,那就在common.h中声明一个unsignedcharkey,然后由于包含关系,在main.ccommon.c中都是可见的,所以就能共用了。


  这种想法其实是很多初学者都会想到的,想起来确实有道理,但是实际写出来,我们发现编译的时候编译器提示出错,一般提示大概都类似于:
Error:L6200E:Symbolkeymultiplydefined(bycommon.oandmain.o).也就是说编译器认为我们重复定义了key这个变量。这是因为#include命令就是原封不同的把头文件中的内容搬到#include的位置,所以相当于main.ccommon.c中都执行了一次unsignedcharkey,而C语言中全局变量是项目内(或者叫工程内)可见的,这样就造成了一个项目中两个变量key,编译器就认为是重复定义。

  正确的解决办法:使用extern关键字来声明变量为外部变量。具体说就是在其中一个c文件中定义一个全局变量key,然后在另一个要使用key这个变量的c文件中使用extern关键字声明一次,说明这个变量为外部变量,是在其他的c文件中定义的全局变量。请注意我这里的用词:定义声明。例如在main.c文件中定义变量key,在common.c文件中声明key变量为外部变量,这样这两个文件中就能共享这个变量key了,如下图所示。



  代码如下(只写跟我们所说问题有关的部分):

  (1main.c文件

 #include"common.h"
 unsignedcharkey;

  

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章