那位大虾知道,为什么我定义这个标志,编译的时候会有下面的

[复制链接]
4716|9
 楼主| 王培1 发表于 2007-12-6 20:48 | 显示全部楼层 |阅读模式
typedef&nbsp;union{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;RemainZero:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;OverdraftOver:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ShutDownVoltage:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveState:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;MagAttach:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;LineCutOff:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;BreakSignal:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;SingleSensorERR:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;RemainLessAlarm:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveTimesOpened:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveTimesClosed:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveIsLeak:1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveIsOpenning:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveIsClosing:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveIsMangle;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;ValveIsPosition:1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}Bits;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;allbits;<br />}RunFlagSTR;<br />extern&nbsp;RunFlagSTR&nbsp;MYRunFlag;<br />//警告开始<br />C4000:&nbsp;Condition&nbsp;always&nbsp;TRUE<br /><br />main.c&nbsp;line&nbsp;32&nbsp;&nbsp;&nbsp;<br /><br />L1823:&nbsp;External&nbsp;object&nbsp;MYRunFlag&nbsp;in&nbsp;E:workwater_projectfree_testProject_1Project_1_DataStandardObjectCodemain.c.o&nbsp;created<br />by&nbsp;default<br /><br /><br />
ayb_ice 发表于 2007-12-6 21:54 | 显示全部楼层

随便说说

C4000:&nbsp;Condition&nbsp;always&nbsp;TRUE这好象是预处理的问题,你双击的时候定位在何处呢?<br />另外int只有16个位,你这里已经超出了。
 楼主| 王培1 发表于 2007-12-7 08:42 | 显示全部楼层

to ayb_ice

1:C4000:&nbsp;Condition&nbsp;always&nbsp;TRUE<br /><br />main.c&nbsp;line&nbsp;32&nbsp;<br />这句是我程序里用了while(1)<br />{},我没有用for(;;)<br />这个没有什么的<br />2:关键是我定义的那个标志,编译提示<br />L1823:&nbsp;External&nbsp;object&nbsp;MYRunFlag&nbsp;in&nbsp;E:workwater_projectfree_testProject_1Project_1_DataStandardObjectCodemain.c.o&nbsp;created<br />by&nbsp;default<br />这个我不知道为什么
张明峰 发表于 2007-12-7 09:14 | 显示全部楼层

去掉extern

治愈率90%
 楼主| 王培1 发表于 2007-12-7 09:41 | 显示全部楼层

回 教主

是的,我之前没有用extern是好的,但考虑到多个.C文件要用到这个标志,所以把它声明成extern,小生刚学C,嘿嘿.可能比较业余
ayb_ice 发表于 2007-12-7 10:39 | 显示全部楼层

CW里是要用for(;;)代替while(1)

  
张明峰 发表于 2007-12-7 10:49 | 显示全部楼层

extern

extern的意思只是让编译器知道这个变量定义在<font color=#0000FF>别的</font>模块文件中。你一定要在某一个文件里<font color=#0000FF>定义</font>它。如果所有的文件中只有extern声明,那就没有变量实体了。好在CW看到了这么一个问题,就自动替你生成了变量实体的定义,同时给你一句告警提示,怕有人说它“画蛇添足”。很多编译器没有这一功能,最后在连接时会给你一个错误说“被引用的变量无法找到”。<br /><br />CW里用while(1)没有任何问题,只是多了一个告警,不管它就是了。
ayb_ice 发表于 2007-12-7 11:03 | 显示全部楼层

我喜欢没有任何警告,错误。

  
 楼主| 王培1 发表于 2007-12-7 11:24 | 显示全部楼层

回教主我明白了,谢谢

至于那个while(1)<br />{}<br />和for(;;)<br />{}<br />我是在一个老外写的C的一篇**里提到的,他认为for(;;){}这种形式比较难理解,而while(1){}可以用C的语法解释,我在网上看见这两种形式的写法都有,其实效果都一样,看自己习惯
rodger_br 发表于 2007-12-10 20:02 | 显示全部楼层

8楼说的不错

警告有些时候就是致命错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

142

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部