打印

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

[复制链接]
3153|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
王培1|  楼主 | 2007-12-6 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef union{
     struct{
      unsigned RemainZero:1;
      unsigned OverdraftOver:1;
      unsigned ShutDownVoltage:1;
      unsigned ValveState:1;
      unsigned MagAttach:1;
      unsigned LineCutOff:1;
      unsigned BreakSignal:1;
      unsigned SingleSensorERR:1;
      unsigned RemainLessAlarm:1;
      unsigned ValveTimesOpened:1;
      unsigned ValveTimesClosed:1;
      unsigned ValveIsLeak:1; 
      unsigned ValveIsOpenning:1;
      unsigned ValveIsClosing:1;
      unsigned ValveIsMangle;
      unsigned ValveIsPosition:1; 
           }Bits;
      unsigned int allbits;
}RunFlagSTR;
extern RunFlagSTR MYRunFlag;
//警告开始
C4000: Condition always TRUE

main.c line 32   

L1823: External object MYRunFlag in E:workwater_projectfree_testProject_1Project_1_DataStandardObjectCodemain.c.o created
by default


相关帖子

沙发
ayb_ice| | 2007-12-6 21:54 | 只看该作者

随便说说

C4000: Condition always TRUE这好象是预处理的问题,你双击的时候定位在何处呢?
另外int只有16个位,你这里已经超出了。

使用特权

评论回复
板凳
王培1|  楼主 | 2007-12-7 08:42 | 只看该作者

to ayb_ice

1:C4000: Condition always TRUE

main.c line 32 
这句是我程序里用了while(1)
{},我没有用for(;;)
这个没有什么的
2:关键是我定义的那个标志,编译提示
L1823: External object MYRunFlag in E:workwater_projectfree_testProject_1Project_1_DataStandardObjectCodemain.c.o created
by default
这个我不知道为什么

使用特权

评论回复
地板
张明峰| | 2007-12-7 09:14 | 只看该作者

去掉extern

治愈率90%

使用特权

评论回复
5
王培1|  楼主 | 2007-12-7 09:41 | 只看该作者

回 教主

是的,我之前没有用extern是好的,但考虑到多个.C文件要用到这个标志,所以把它声明成extern,小生刚学C,嘿嘿.可能比较业余

使用特权

评论回复
6
ayb_ice| | 2007-12-7 10:39 | 只看该作者

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

使用特权

评论回复
7
张明峰| | 2007-12-7 10:49 | 只看该作者

extern

extern的意思只是让编译器知道这个变量定义在别的模块文件中。你一定要在某一个文件里定义它。如果所有的文件中只有extern声明,那就没有变量实体了。好在CW看到了这么一个问题,就自动替你生成了变量实体的定义,同时给你一句告警提示,怕有人说它“画蛇添足”。很多编译器没有这一功能,最后在连接时会给你一个错误说“被引用的变量无法找到”。

CW里用while(1)没有任何问题,只是多了一个告警,不管它就是了。

使用特权

评论回复
8
ayb_ice| | 2007-12-7 11:03 | 只看该作者

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

使用特权

评论回复
9
王培1|  楼主 | 2007-12-7 11:24 | 只看该作者

回教主我明白了,谢谢

至于那个while(1)
{}
和for(;;)
{}
我是在一个老外写的C的一篇**里提到的,他认为for(;;){}这种形式比较难理解,而while(1){}可以用C的语法解释,我在网上看见这两种形式的写法都有,其实效果都一样,看自己习惯

使用特权

评论回复
10
rodger_br| | 2007-12-10 20:02 | 只看该作者

8楼说的不错

警告有些时候就是致命错误

使用特权

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

本版积分规则

37

主题

142

帖子

0

粉丝