我在这里遇到了一个非常简单的问题。
我有一个全局变量的宏,它在我的Header中定义如下:
extern bool uart_message_received;
#define get_uart_message_rec() uart_message_received;
在我的C-File中,我想要访问这样的文件:
bool uart_message_received = 0;
void foo(void)
{
bool test;
test = get_uart_message_rec(); // Works fine
if(get_uart_message_rec()==0) // Doesn't work
{
//...
}
}
我有点困惑为什么if
中的条件不起作用。我做错了什么,还是我违反了一些C指令?
答案 0 :(得分:4)
删除结尾处的冒号:
#define get_uart_message_rec() uart_message_received;
因为它变成了:
if(**uart_message_received;**==0) // Doesn't work
{
//...
}
当预处理器基本上找到/替换你的代码时。
答案 1 :(得分:4)
#define get_uart_message_rec() uart_message_received
// ^ no semicolon
宏替换将按原样替换文本,包括您的;
。这将导致if
案例中的语法错误。
答案 2 :(得分:3)
你的宏的末尾有一个分号 - 删除它,它会没事的。请注意,宏的确完全替换为写入,因此宏扩展为:
if(get_uart_message_rec()==0)
到:
if(uart_message_received; ==0)
应该使编译器出错。
[写得太慢了!]
答案 3 :(得分:3)
这是因为你在宏的末尾有一个分号。
在实际编译器看到文本之前,宏将被替换为 ,因此替换后的语句如下所示:
if(uart_message_received;==0)