C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL” 及extern的运用剖析

本文详细解析了C51编译时出现的“UNRESOLVEDEXTERNALSYMBOL”警告的原因及解决方法,主要涉及未添加C文件到项目、未正确定义或声明外部符号等问题。
部署运行你感兴趣的模型镜像

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

SYMBOL: ?C_START

MODULE: .STARTUP.obj (?C_STARTUP)

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

SYMBOL: ?C_START

MODULE: .STARTUP.obj (?C_STARTUP)

ADDRESS: 000DH

如果你在用C51编译器出现上面的警告,并且找遍了网上也没能找出个究竟时,你是否觉得这个问题很难,难得以至于没人能回答呢?

其实这个只是初学者和粗心者才会犯的错误:没把C文件添加到项目中!

///另外,还有可能是因为存在没有被调用的已经定义的函数。

源文档 <http://blog.163.com/paulucy@126/blog/static/94930282200911240504985/>


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文件的程序之前再定义一下就可以了。

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

SYMBOL: K

MODULE: 111.obj (111)

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

SYMBOL: K

MODULE: 111.obj (111)

ADDRESS: 000DH

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

SYMBOL: K

MODULE: 222.obj (222)

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

SYMBOL: K

MODULE: 222.obj (222)

ADDRESS: 001FH

这四个警告就是变量k在头文件中有声明,但是没有定义,只需在某一个c文件的程序之前定义一下即可。

源文档 <http://www.cublog.cn/u1/47082/showart_375642.html>

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: REV MODULE: .\Objects\uart1.obj (UART1) *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?UARTINIT?UART1 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_UART1_SENDSTING?UART1 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_PUTCHAR?UART1 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?KEYSCAN_P0?KEY *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?TIMER0_INIT?TIME0 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: KEY_SCANF MODULE: .\Objects\main.obj (MAIN) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: KEY_CONFIG MODULE: .\Objects\main.obj (MAIN) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: KEY_CONFIG MODULE: .\Objects\main.obj (MAIN) ADDRESS: 0004H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: KEY_SCANF MODULE: .\Objects\main.obj (MAIN) ADDRESS: 0007H *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: TIMER0 MODULE: .\Objects\time0.obj (TIME0) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: TIMER0 MODULE: .\Objects\time0.obj (TIME0) ADDRESS: 0114H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: TIMER0 MODULE: .\Objects\time0.obj (TIME0) ADDRESS: 0116H *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: TIMER0 MODULE: .\Objects\time0.obj (TIME0) ADDRESS: 011AH Program Size: data=16.0 xdata=0 code=325 Target not created. Build Time Elapsed: 00:00:01
05-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值