小豆丁:老张!!!你终于出现了!!!
老张:干嘛,这么大惊小怪的!
小豆丁:你知不知道,你都消失快一个月了!
老张:嘿嘿,这不是比较忙吗。。。
小豆丁:哼,快点给我看看这个条件编译的问题吧,你不在的日子,都没人给我解答问题了。
老张:说说看,啥问题
小豆丁:#if...#elif...#else...#endif,就是这个啦,怎么用他啊,需要注意什么啊?
老张:这是条件编译,其功能,类似我们的if条件分支,对代码进行选择性执行。
小豆丁:那它是根据什么进行代码选择执行的呢?
老张:条件表达式啊,类似if条件分支一样,条件表达式成立,则执行对应的代码,如果不成立,则不执行,跳过,进行下一个条件表达式的判断。
小豆丁:这不就是条件分支吗?
老张:和if条件分支还是有区别的,第一个不同的地方就是在条件编译的指令后所跟的条件表达式一定是常量表达式,比如 5 > 3 或者 defined(MAX) 或者 用到宏的表达式。涉及到变量的条件表达式,是不能正常执行的。
小豆丁:给我举个例子呗
老张:比如下边的这个代码。
小豆丁:哦哦,我明白了,条件编译虽然可以像if条件分支一样进行代码选择性执行,但是对应的条件只能是常量表达式。
老张:没错,这是条件编译和if分支的一个区别。
老张:还有一个要重点掌握的内容,就是条件编译的相关代码是发生在编译过程的预编译阶段,只有满足条件的分支里的代码才会被编译器保留,比如下边的这个预编译后的文件。
小豆丁:哦哦,原来条件编译,和宏一样,也是发生在预编译阶段啊,只有满足条件的部分代码才会被保留。
小豆丁:这么说我就明白了,我得赶紧敲个代码试试去。
老张:还有啊,条件编译最后的#endif,千万别忽略了啊!
小豆丁:记住啦~~,谢谢老张!