注册 登录
查看: 324|回复: 8

什么时候能执行到elif?为什么这里要用预处理?

[复制链接]
发表于 2014-6-5 14:40:50 | 显示全部楼层 |阅读模式
    #if 1
  USART_Cmd(USART1, ENABLE);
    #elif 0
     /* ʹÄÜ´®¿Ú1½ÓÊÕÖÐ¶Ï */
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_Cmd(USART1, ENABLE);
    USART_ClearFlag(USART1, USART_FLAG_TC);
    USART1_NVIC_Config();   
    #endif


什么时候能执行到elif?为什么这里要用预处理?
回复

使用道具 举报

发表于 2014-6-5 14:42:12 | 显示全部楼层
不可能执行到 elif 0 内。

这个叫做宏条件编译,根据宏条件来判断代码是否编译。

由于 elif 是 0 ,所以表示注释这段代码,不参与编译
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 14:43:41 | 显示全部楼层
奥,谢谢呀,那这一段只是用来调试的,没有实际用处是吧
回复 支持 反对

使用道具 举报

发表于 2014-6-5 14:47:10 | 显示全部楼层
卢安娜的飓风 发表于 2014-6-5 14:43
奥,谢谢呀,那这一段只是用来调试的,没有实际用处是吧

是的,其实他与普通的 if 、 else if 很相似。唯一不同的是,他是判断是否编译,而不是是否执行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 14:49:50 | 显示全部楼层
那这样的话USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 这句话只能在别的地方加上来打开串口中断了,而在这里没有开串口中断是吧
回复 支持 反对

使用道具 举报

发表于 2014-6-5 14:50:48 | 显示全部楼层
卢安娜的飓风 发表于 2014-6-5 14:49
那这样的话USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 这句话只能在别的地方加上来打开串口中断了,而 ...

你可以认为,上面的代码,实际上可以简化为:
USART_Cmd(USART1, ENABLE);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 14:58:26 | 显示全部楼层
您的意思是这一个函数就能代替上面的两个配置函数加一个时能中断函数?
回复 支持 反对

使用道具 举报

发表于 2014-6-5 15:02:48 | 显示全部楼层
卢安娜的飓风 发表于 2014-6-5 14:58
您的意思是这一个函数就能代替上面的两个配置函数加一个时能中断函数?

不是啊,是上面一大段代码,实际正在执行的就只有一句,其他的都是注释掉了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 15:04:50 | 显示全部楼层
奥这个我知道,我是说要是注释掉这么一大段那那些中断配置什么我在别的文件也没找到,不知道配置哪里去了,明明需要用到终端的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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