独闷闷网

标题: #if,#else,#endif这些预编译指令在函数内部有什么作用?已解答。 [打印本页]

作者: jianhong_wu    时间: 2014-11-2 08:27
标题: #if,#else,#endif这些预编译指令在函数内部有什么作用?已解答。
Tony--青岛:
  1. void Lcd_WriteData(u8 Data)
  2. {
  3.    LCD_CS_CLR;
  4.    LCD_RS_SET;
  5. #if USE_HARDWARE_SPI   
  6.    SPI_WriteByte(SPI2,Data);
  7. #else
  8.    SPIv_WriteData(Data);
  9. #endif
  10.    LCD_CS_SET;
  11. }
复制代码
鸿哥上面这个函数怎么解释?

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

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

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

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

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

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

Tony--青岛:
谢鸿锅。







欢迎光临 独闷闷网 (http://www.dumenmen.com/) Powered by Discuz! X3.2