#if....#else宏编译是碰到的一个坑

#if

  a

#else

  b

#endif,其实这个就是选择编译那部分,和if-else的区别就是:编译的时候进行选择的,如果是a的话,b那么就根本不去编译,而if-else是全部编译好的,然后再去运行。

其实,预编译指令就是在编译前所要做的一些工作,比如,导入头文件,选择编译,等等,这样可以提高编译的效率。

这个是基础的知识。但是今天再判断条件时没有注意,竟然进了坑。

比如这一句

#if (CC_CHARGER_TYPE == CC_CHARGER_TYPE_IOS)
        contentElement_chat = contentElement_chatroom->FirstChildElement("appstore")->FirstChildElement("roomid");
#else
        contentElement_chat = contentElement_chatroom->FirstChildElement("other")->FirstChildElement("roomid");
#endif

本来是没错的,但是这句话是直接复制过来的,没有看判断条件有没有,然后就直接宏定义了,然后再编译运行的时候发现else并没有执行,最后发现,原来没有包含条件编译的那个条件的头文件,denfine的时候这两个变量是找不到的,所以就会一直为真,就只会编译第一个语句,以为编译他会找到的,结果没有包含他是找不到的,记下这个坑,验证起来很简单,可以直接跳转看能不能跳转到他的定义,或者直接去掉#看if会不会报错就知道了

Last modification:January 1st, 1970 at 08:00 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment