今天发现一个隐蔽的条件编译BUG,不容易发现,编译不会出错。是否可以用断言来解决?
2018-01-02 19:38
896 查看
今天发现一个隐蔽的错误,不容易发现,编译不会出错。是否可以用断言来解决?
config.h
tuner.h
main.c
以上写法编译器将认为(DEM_IS__ == STv0288)为真,不是期望的结果。
以下写法(DEM_IS__ ==DEM_HI3205) 条件为真,才是希望的结果。
main.c
编译环境:KEIL ARM MDK 4.21
config.h
#ifndef __CONFIG_H__ #define __CONFIG_H__ #define DEM_IS__ DEM_HI3205 #endif
tuner.h
// tuner.h #ifndef __TUNER_H__ #define __TUNER_H__ #define DEM_STv0288 0 #define DEM_HI3205 1 #define DEM_HDB2501 2 #endif
main.c
#include "config.h" #include "tuner.h" #if(DEM_IS__ == STv0288) #elif(DEM_IS__ == DEM_HI3205 ) #elif(DEM_IS__ == DEM_HDB2501) #else #error "DEM_IS__ not defined " #endif
以上写法编译器将认为(DEM_IS__ == STv0288)为真,不是期望的结果。
以下写法(DEM_IS__ ==DEM_HI3205) 条件为真,才是希望的结果。
main.c
#include "tuner.h" #include "config.h" #if(DEM_IS__ == STv0288) #elif(DEM_IS__ == DEM_HI3205 ) #elif(DEM_IS__ == DEM_HDB2501) #else #error "DEM_IS__ not defined " #endif
编译环境:KEIL ARM MDK 4.21
相关文章推荐
- 今天发现一个非常奇怪的VSIDE BUG,经过1个小时的研究解决
- 解决vc++DEBUG ERROR问题前几天师弟调试程序的时候出现了这样一个错误,出错的位置是在delete [] 一个动态分配的数组时出现的。 经过调查发现错误是因为他之前在给数组赋值的时候越界了
- 今天碰到一个poi解析excel文件的时候报错, 后来发现是这个excel文件单元格里面有公式。删除公式问题解决!
- 今天发现一个关于CSS的东东,解决了我很多疑问
- 大家用Google是否也会经常打不开搜索结果?分享一个好东东吧,可以解决这个问题
- 【BUG解决】IDLE可以编译,而CMD无法通过
- 今天发现一个BUG
- 解决Installer重新安装补丁错误-"无法打开此修补程序包。请确认该修补程序包存在,并且您可以访问它,或者与应用程序供应商联系,以确认这是否是一个有效的 Windows Installer 修补程序包。"
- 今天又发现IE的一个BUG!与Binary Behavior有关
- c#,EXCEL 找不到编译动态表达式所需的一个或多个类型。是否缺少引用?解决办法
- 今天解决了一个bug,是一个页面渲染丢失页面的bug
- 今天第一天加入CSDN,发现CSDN网站的一个小BUG!
- 今天做一个winform,想直接把窗体改成输出类库,其他地方直接调结果总提示不能注册组件,回来调度,可以,总结,windows还是直接用新建的类型项目,改容易出错
- 今天发现的kali rolling中的一个翻译bug
- 现在为了让程序兼容vista,我们需要给程序加上一个manifest文件,可是有时候vc6它就会弹出Resource Compiler Error RC2170 的错误,可能是vc6一个bug,我个人对vc6还是很喜欢的,不过经常会有编译死掉或出错的问题,
- 今天发现一个 vc 的大 bug
- 发现NETSCALER 9800的一个BUG,目前正在解决。
- 玩怪物猎人P3发现一个BUG可以金钱无数(非老金)
- 今天发现了一个很好用的,可以试用一个月的免费asp.net2.0空间!!真是太高兴了.感谢提供者;
- DELPHI中的ADODB.pas 单元中,一个直到今天都还没有解决的BUG