一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
编译是在运行前执行的,比如说只是if else语句可能运行时 有些语句可能就没执行,但在编译阶段它们都经行了编译。
而像你上面的#if #else 则不同 #if NNN 就是指当NNN标示符已经定义过则对程序段statement1进行编译,而statement2和statement3则跳过了。
你可能会问:不用条件编译命令而直接用if语句也能达到要求,用条件编译命令有什么好处呢?的确,此问题完全可以不用条件编译处理,但那样做目标程序长(因为所有语句都编译),而采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。
一个程序从代码到可执行文件有4步:预处理、编译、汇编、链接。
条件编译是处于预处理阶段。它是由预处理器来做这个工作的。预处理器只识别行首是#的内容。所以,如果你把#去掉了,那么预处理器就不能识别了,就变成了普通的语句了,只能在编译阶段识别。而且,如果一句代码本来是预处理器处理的,结果你把#号去掉了,那么预处理器就会不能处理,就会报错。就算预处理器不报错,到了编译阶段,编译器也会报错。所以#是条件编译的关键。
加#是编译的时候编译器决定编译与否。不满足条件的话就不编译。不加#就都是程序了,编译器全都编译,在运行程序的时候才判断条件。
标签:编译,条件