打印
[STM32F1]

关于#define XXXX的问题

[复制链接]
1541|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
爱好学习者|  楼主 | 2015-1-23 09:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经常看到这样的代码:
#define XXXXX
#ifdef XXXXX
  code()
#endif
知道当定义了XXXX的时候调用code()函数,但是有个问题不明白,在头文件里面定义XXXXX就会调用程序,如果不在头文件里面定义XXXX,程序就会报错,所以就一定要有这个定义,一定要有,这么使用还有什么意义呢,直接每次都调用不就可以了么?请大家帮忙解答一下疑惑。
沙发
airwill| | 2015-1-23 09:43 | 只看该作者
另外补充一点.
一定要有这个定义,否则程序编译就会报错,也说明这段代码写得有问题

使用特权

评论回复
板凳
magicjiang| | 2015-1-23 09:45 | 只看该作者
用IAR 环境亲测了,不会报错

#ifdef XXXXX
        DispMsgPollingHandle();
#endif

使用特权

评论回复
地板
as564335sa| | 2015-1-23 10:32 | 只看该作者
代码问题,好好查查吧

使用特权

评论回复
5
爱好学习者|  楼主 | 2015-1-23 11:40 | 只看该作者
我的意思并不是说在哪定义的问题,我的意思是说不定义就会报错,定义就会进入#ifdnf,那么我定义它还有什么意义,我直接把那段代码加入到函数里面就可以了,为什么要多次一举呢

使用特权

评论回复
6
Serge_Ding| | 2015-1-23 11:42 | 只看该作者
爱好学习者 发表于 2015-1-23 11:40
我的意思并不是说在哪定义的问题,我的意思是说不定义就会报错,定义就会进入#ifdnf,那么我定义它还有什么 ...

方便移植

使用特权

评论回复
7
mmuuss586| | 2015-1-23 12:09 | 只看该作者

和编译器有关吧;

使用特权

评论回复
8
gaopo304| | 2015-1-23 14:10 | 只看该作者
这样做方便代码移植。特别是同一系列处理器的代码中经常看到这样的定义。如果更改处理器,代码只需更改一个宏定义就可以了。

使用特权

评论回复
9
eydj2008| | 2015-1-24 09:03 | 只看该作者
这样写,主要是为了兼容性,比如换一个器件,直接改定义就好了,不用再修改程序。

说到这里,需要我总结了一下写一个函数需要考虑的问题:
1.可靠性
2.效率
3.兼容性
4.出错机制
如果这几个问题考虑到了,一个函数也不会太差了。

使用特权

评论回复
10
diweo| | 2015-1-24 13:15 | 只看该作者
爱好学习者 发表于 2015-1-23 11:40
我的意思并不是说在哪定义的问题,我的意思是说不定义就会报错,定义就会进入#ifdnf,那么我定义它还有什么 ...

不管xxx有没有定义,在何处定义
#ifdef xxx
code();
#endif
都不会报错。
最多就是code()不被执行而已。

使用特权

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

本版积分规则

19

主题

73

帖子

0

粉丝