#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