前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >#if 和#ifdef的区别

#if 和#ifdef的区别

作者头像
老白
发布2018-03-19 15:53:36
1.2K0
发布2018-03-19 15:53:36
举报
文章被收录于专栏:架构之路架构之路

转载自 http://blog.csdn.net/zhangchiytu/article/details/7563329

 先看个例子:

#define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA   0 #ifdef TARGET_LITTLE_ENDINA call little endina function #else call big endina function #endif 不管把TARGET_LITTLE_ENDINA和TARGET_BIG_ENDINA定义成0或者1,甚至后面不写这个0或者1 ,调用的都是little endina函数,这段代码是有问题的,就是没有理解#if和#ifdef之间的区别。

#if的使用说明

#if的后面接的是表达式,如果表达式为1,则编译#if下面的代码

#if (MAX==10)||(MAX==20)
 code...
#endif

它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)

#ifdef的使用

#if后面接的是一个宏

#ifdef (x)
    ...code...
#endif

这个#ifdef 它不管里面的“x”的逻辑是“真”还是“假”,它只管这个程序前面的宏定义里面有没有定义“x”这个宏(即在这里#define  x 1和#define  x 0等效,都等同于#define x),如果定义了x这个宏,那么编译器会编译中间的…code…否则直接忽视中间的…code…代码。

#if defined的使用

#if defined() 的使用和#ifdef的用法一致 #if !defined()又和 #ifndef 的用法一致。

最后强调两点: 第一:这几个宏定义只是决定代码块是否被编译! 第二:别忘了#endif

明白了之间的区别问题就变得非常的容易,修改上述代码只要把其中的#ifdef改成#if就可以达到目的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  先看个例子:
    • #if的使用说明
      • #ifdef的使用
        • #if defined的使用
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档