独闷闷网

 找回密码
 立即注册
搜索
查看: 1791|回复: 0
收起左侧

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

[复制链接]
发表于 2014-11-2 08:27:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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--青岛:
谢鸿锅。


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2021-6-12 20:27 , Processed in 0.138442 second(s), 18 queries .

快速回复 返回顶部 返回列表