jianhong_wu 发表于 2014-11-2 08:27:37

#if,#else,#endif这些预编译指令在函数内部有什么作用?已解答。

Tony--青岛:
void Lcd_WriteData(u8 Data)
{
   LCD_CS_CLR;
   LCD_RS_SET;
#if USE_HARDWARE_SPI   
   SPI_WriteByte(SPI2,Data);
#else
   SPIv_WriteData(Data);
#endif
   LCD_CS_SET;
}鸿哥上面这个函数怎么解释?

#if...
#else...
#endif...
这些也是if else语句?有什么差别?

鸿哥--深圳 :
一般带#号的这个叫预编译指令,是在准备把源代码生成hex代码时提前给编译器看的。编译器会根据你的预编译指令,自动把不需要的代码进行删减,不把它编译到hex那部分的代码。
而不带#号的 if else 是给CPU上电运行时看的。

Tony--青岛:
以上代码,假如第一个#if没有用,我可以删掉吗?

鸿哥--深圳:
如果 USE_HARDWARE_SPI不为0 那么就是用第二个,这样写主要方便作者调试。如果第一个没有用 ,可以删掉的,删掉的时候记得把那一条完整的预编译指令删除干净,比如要把#endif也删掉。

Tony--青岛:
#endif什么意思?删掉后可以提高程序调用速度吗?

鸿哥--深圳:
#endif也是预编译的规定语法结构,表示那条编译指令结束了。
删掉或者留着预编译指令跟速度没有任何关系。也跟容量没有关系。这样写主要方便作者调试。它是在你还没有上电的时候,C51编译器会根据你那条指令帮你去掉不要的代码。

Tony--青岛:
谢鸿锅。


页: [1]
查看完整版本: #if,#else,#endif这些预编译指令在函数内部有什么作用?已解答。