我经常在stm32f0的通用代码中找到一行,但我无法清楚地理解它。下面这行是什么意思。我知道这种方式很难理解。但我的观点是定义中的问号(?)。有人可以解释一下。
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
答案 0 :(得分:2)
在C中,它的真正用处在于它是一个表达式而不是一个表达式 声明;也就是说,你可以把它放在a的右侧(RHS) 声明。所以你可以更简洁地写出某些东西。
来源:The ternary (conditional) operator in C
聚苯乙烯。我会使用评论,但由于50的声誉限制,这是不可能的。
答案 1 :(得分:1)
这里使用条件运算符。 它表示如果expr为true,那么宏assert_param(expr)的值将为零或其他 它将调用另一个宏或函数assert_failed(),并将两个参数作为输入。 第一个是 FILE 宏,它是调用宏的文件名,另一个是 LINE macro,它是调用宏的文件中的行号。
条件运算符格式如下:
a?b:c
这意味着如果a为真,那么b将是结果,否则c将是结果。 因此,您可以在表达式中分隔这些语句。
答案 2 :(得分:1)
这是一种短暂的状态, 你可以写
int k = (i > j) ? i : j;
如果i > j
,它会将我指向k,否则它将对齐。
这是我们在宏