#define MIN(A,B) ((A) <= (B) ? (A) : (B))
这是宏观,有人问我有什么副作用,如果我使用了以下内容:C中下列宏的副作用是什么?嵌入式C
least = MIN(*p++, b);
注:这是嵌入式C问题
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
这是宏观,有人问我有什么副作用,如果我使用了以下内容:C中下列宏的副作用是什么?嵌入式C
least = MIN(*p++, b);
注:这是嵌入式C问题
它评估p++
两次。此外,由于第一次评估发生变化p
,第二次约它将指向一个不同的元素。所以返回的值将是*(initialp + 1)
或b
。
你应该自己试试。
*p++
被两次评估的宏扩展到*p++ <= b ? *p++ : b
此外,还有为“嵌入式C”没有这样的事。
宏将扩展为:
least = ((*p++)<=(b)?(*p++):(b))
你会有那么*p++
两次在发言(即,它将会增加两倍)。
只是一个与问题没有完全相关的评论:这是许多语言没有宏的原因之一:可以混淆你的代码。 – Matteo