文档章节

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

SamXIAO
 SamXIAO
发布于 2017/07/10 15:50
字数 178
阅读 32
收藏 1

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

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

© 著作权归作者所有

SamXIAO
粉丝 3
博文 107
码字总数 31548
作品 0
成都
部门经理
私信 提问
加载中

评论(1)

SamXIAO
SamXIAO 博主
可以在 config.h 文件中添加以下行解决:
#include "tuner.h"
debug VS release

可以这么说:release版本取掉了debug信息,进行了优化。 举个例子:那断言----Assertion来说,很多库函数本身的实现代码里,包含了很多的断言。通过ASSERT宏来声明这些断言,这个宏只有在程序...

文艺小青年
2017/07/07
0
0
Tip: Unicode Debug和Debug有什么区别?

Unicode Debug和Debug有什么区别? Unicode Debug是宽字符(UNICODE)版本,每个字符占用两个字节的存储空间 普通的Debug是单字(MBCS)版本,一个是unicode工程,另一是ansi工程。 相对于ASCII...

AlphaJay
2010/08/11
925
0
Release VS Debug

可以这么说:release版本取掉了debug信息,进行了优化。 举个例子:那断言----Assertion来说,很多库函数本身的实现代码里,包含了很多的断言。通过ASSERT宏来声明这些断言,这个宏只有在程序...

文艺小青年
2017/06/28
0
0
问题定位方法

1.1 问题原因分析 从问题发生的环境,大致可分为线上环境问题、测试环境问题、本地环境问题。 1.1.1 线上环境问题 线上环境问题大致可分为阻塞性问题和非阻塞性问题。其中,阻塞性问题是影响...

Fraud
2018/01/11
111
0
C语言中的断言,据说JAVA将全面引入,过来学习一下

在讲解之前,我们先来对断言做一个基本的介绍,让大家对断言有一个大致的了解。在使用 C 语言编写工程代码时,我们总会对某种假设条件进行检查,断言就是用于在代码中捕捉这些假设,可以将断...

loki_lan
2012/11/20
611
5

没有更多内容

加载失败,请刷新页面

加载更多

JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
22分钟前
4
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
28分钟前
5
0
析构函数是否必须为虚函数?为何?

在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易造成...

天王盖地虎626
28分钟前
4
0
【TencentOS tiny】深度源码分析(7)——事件

引言 大家在裸机编程中很可能经常用到flag这种变量,用来标志一下某个事件的发生,然后在循环中判断这些标志是否发生,如果是等待多个事件的话,还可能会if((xxx_flag)&&(xxx_flag))这样子做...

杰杰1号
32分钟前
6
0
聊聊nacos client的ServerHttpAgent

序 本文主要研究一下nacos client的ServerHttpAgent HttpAgent nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/http/HttpAgent.java public interface HttpAgent { ......

go4it
38分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部