您的位置:首页 > 其它

今天发现一个隐蔽的条件编译BUG,不容易发现,编译不会出错。是否可以用断言来解决?

2018-01-02 19:38 896 查看
今天发现一个隐蔽的错误,不容易发现,编译不会出错。是否可以用断言来解决?

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c keil MDK ARM
相关文章推荐