原创 KEIL C51 L04编译错误的解决办法

2008-11-27 09:49 7789 20 21 分类: MCU/ 嵌入式

   今天整理整理程序,编译时遇到L104错误,这个错误涉及到extern的用法。这里作一简要介绍。
    对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前对变量进行定义就可以了。
    在较大的程序中,经常采用模块化处理程序,此时定义的方法有两种:
    1、用extern来声明:extern bit DispFlag;这一句只是对变量DispFlag进行声明,在c文件的程序之前必须加上bit DispFlag进行定义。extern bit DispFlag="0";这一句声明和定义都做了。
    2、对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明,然后在一个c文件中定义。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。
  *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  DISPFLAG
    MODULE:  PS2.obj (PS2)


  出现上述错误则是因为变量DispFlag重复定义。解决办法就是把你的头文件中的变量定义前加extern声明变量,此时不要定义变量,然后再在某一个c文件的程序之前再定义一下就可以了。
  例如:在PS2.H中声明变量DispFlag
    extern bit   DispFlag;


在ps2.c中定义变量
    bit   DispFlag="0";


这样就不会出现上面的错误提示了。

文章评论1条评论)

登录后参与讨论

用户377235 2014-1-26 16:26

多谢楼主!
相关推荐阅读
用户70812 2010-12-16 17:20
准备要学习STM32了
形势所迫,要学习STM32了,初步看了看,不好学呀...
用户70812 2010-06-13 14:56
SQL SERVER 中IP地址的排序方法
最近在编写一个IP管理的web,要用到IP地址的排序问题,存储IP地址的字段为字符型的,当直接排序时,IP地址按字符的方式排序,无法得到正确的IP地址排序,经过查找资料,采用如下语句即可实现IP地址的...
用户70812 2010-05-31 09:06
三极管与数字电路
下面两张图片源自21ic,论坛上richardnee的帖子,作为资料收藏一下...
用户70812 2010-02-19 14:03
英语主语格式变化
主格          形容词性物主代词    宾格   名词性物主代词I                         my                      me            ...
用户70812 2009-12-22 15:27
线性稳压器工作原理及其补偿
网上找到的资料:...
用户70812 2009-12-12 22:51
中断方式数码管显示的演示实例
在一个论坛回答别人的提问的时候的回帖,放在这里,程序很简单,需要的就看看,也欢迎多指教。/*******************************************************...
我要评论
1
20
关闭 站长推荐上一条 /2 下一条