#ifndef语句_单片机C语言

来源:百度知道 编辑:UC知道 时间:2024/06/07 20:58:17
请教高手 下边的这段程序为什么是对的
那是怎样执行的?

............
...........
........
int main(void)
{

#ifndef NO_UART_CHECK
/* Make sure Uart has been successfully initialised before running */
if (StreamUartSource())
#endif
{......................
......................
......................

}
return 0;
}

先谢了!

如果没有定义NO_UART_CHECK,则执行判断StreamUartSource(),为真的时候执行下面的语句,为假直接返回0;
如果定义了NO_UART_CHECK,直接执行花括号里的语句。
上面应该还有StreamUartSource()的实现吧。

如果没定义NO_UART_CHECK 的话,就检查 uart,只有StreamUartSource()返回非0才会运行下面大括号里的东西。 否则的话就跳过检查,直接运行

include <stdio.h>-------->如果stdio.h中包含预编译语句 #define NO_UART_CHECK
include <stdlib.h>------->或者如果stdlib包含预编译语句 #define NO_UART_CHECK
#define NO_UART_CHECK------->或者如果这里显式定义了NO_UART_CHECK(这就是定义方式)
int main(void)
{

#ifndef NO_UART_CHECK
if (StreamUartSource())//如果有上面三者任何一个,就表示定义了NO_UART_CHECK,那么#ifndef和#endif之间的部分将被编译器跳过,如果没有上面三者任何一个那么执行#ifndef和#endif之间的部分,注意这里是#ifndef不是#if或者#ifdef
#endif
{......................
}
return 0;
}

这解释你一定明白了。

上面三位说的都对,一楼的最容易理解。