if 条件下的 C 宏

标签 c macros

我这里有一个非常简单的问题。

我有一个全局变量的小宏,它在我的标题中定义如下:

extern bool uart_message_received;
#define get_uart_message_rec() uart_message_received;

在我的 C 文件中,我想像这样访问文件:

 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 指令?

最佳答案

#define get_uart_message_rec() uart_message_received
                                                 // ^ no semicolon

宏替换将按原样替换文本,包括 ; 在您的情况下。这将导致 if 情况下的语法错误。

关于if 条件下的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15053975/

相关文章:

c++ - 类型转换是否会消耗额外的 CPU 周期

检查两个字符数组是否相等 C

c - 带引用参数的 printf

c - 当 sizeof(char) != 1 时,C 中的字节精度指针算法

sql - 将sql select语句的结果放入C中的变量中

c - 拒绝指针的数组大小的宏

c++ - 定义预处理器宏

javascript - 使用 Sweet.js 匹配 block 的结尾

c++ - 自动销毁堆对象的宏

c++ - 是否可以将 C++ 实现为带有宏的 C 库?