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.为什么去掉哪个都不行? 请高手不吝赐教!谢谢!两个问题都要回答哦 |