打印

2812的c语言编译问题:两种错误提示都是未定义,有何不同?

[复制链接]
2208|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cehon|  楼主 | 2007-5-7 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2楼的,谢谢啦,我懂啦,原来是对extern理解不透彻啊。

我在用CCS2.2编译的时候发现一个问题:
同一个结构体DevEmuRegs分别.h和.c两个文件中都定义了,编译的时候竟然没有提示错误!
并且屏蔽其中任一个编译都会失败,提示未定义!为什么?
两种显示未定义的提示不同,分别如下:

=======DSP28_DevEmu.h文件中=========
在DSP28_DevEmu.h中用这句extern volatile struct DEV_EMU_REGS DevEmuRegs;定义的。屏蔽掉这个语句之后对工程编译,错误提示如下:

"DSP28_SysCtrl.c", line 36: error: identifier "DevEmuRegs" is undefined
1 error detected in the compilation of "DSP28_SysCtrl.c".

"C:\ti\c2000\cgtools\bin\cl2000" -g -q -fr"c:/ti/myprojects/PIE/Debug" -d"_DEBUG" -d"LARGE_MODEL" -ml -v28 -@"Debug.lkf" "pie.c"

Build Complete,
  1 Errors, 0 Warnings, 0 Remarks.

=======DSP28_GlobalVariableDefs.c文件中=========
在DSP28_GlobalVariableDefs.c中是用这个语句volatile struct DEV_EMU_REGS DevEmuRegs;定义的。屏蔽掉这个语句后对工程编译错误提示如下:

undefined                        first referenced
 symbol                              in file
---------                        ----------------
_DevEmuRegs                      c:\ti\myprojects\PIE\Debug\DSP28_SysCtrl.obj
>>   error: symbol referencing errors - './Debug/PIE.out' not built

Build Complete,
  1 Errors, 0 Warnings, 0 Remarks.

=========================
我的问题是:
1.为什么重复定义不提示错误?
2.为什么去掉哪个都不行?
请高手不吝赐教!谢谢!两个问题都要回答哦

相关帖子

沙发
wowow| | 2007-5-7 17:32 | 只看该作者

extern表示别处定义过了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

35

帖子

0

粉丝