#if............
#else if...........这是预处理语句。
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。在单片机中属于条件编译,也就是说当满足条件,就将#if后面的语句进行编译,否则,丢弃这些部分语句,编译#else if后面的语句。
#if #else #endif 这叫条件编译,在编译时确定哪些代码编译,哪些代码不编译。而if else 是在运行的时候根据条件决定执行哪部分代码。
#if (PARITYBIT == NONE_PARITY) //
S2CON = 0x5a; //8位可变波特率 (无校验位)
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
S2CON = 0xda; //9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
S2CON = 0xd5; //9位可变波特率,校验位初始为0
#endif
我拿这一段举例子, #if (PARITYBIT == NONE_PARITY) :如果if后面的条件成立,编译后面部分,就是S2CON = 0x5a; //8位可变波特率 (无校验位)。#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY): 如果前面#if条件没有成立,没有编译,继续判断这一句, 这一句再不成立,在判断下面的#elif ,一直到#endif 为止。 #endif就是一段条件编译的结束。 每一个#if或者#ifndef或者#ifdef为开始的条件起始,必对应有一个#endif条件编译的结束。