#define MIN(A,B) ((A) <= (B) ? (A) : (B))
这是宏,我被问到如果我使用以下内容会产生什么副作用:
least = MIN(*p++, b);
注意:这是嵌入式问题
答案 0 :(得分:7)
它评估p++
两次。此外,由于第一次评估会更改p
,第二次评估会更改,它会指向不同的元素。因此返回的值为*(initialp + 1)
或b
。
你应该自己尝试一下。
答案 1 :(得分:7)
宏将扩展为:
least = ((*p++)<=(b)?(*p++):(b))
您的陈述中将有*p++
两次(即,它会增加两次)。
答案 2 :(得分:2)
*p++
时, *p++ <= b ? *p++ : b
会被评估两次
此外,没有“嵌入式C”这样的东西。
答案 3 :(得分:1)
假设初始地址为p = 0xfcf0,* p = 1,b = 2,值@ 0xfcf4 = 5且值@ 0xfcf8 = 15
宏将扩展为
至少=((* p ++)&lt; =(b)?(* p ++):( b));
即最少=((1)&lt; =(2)?(* p ++):( b));
因为* p递增两次。
1)* p ++ - &gt;现在p将指向地址0xfcf4;
2)* p ++ - &gt;现在p将指向地址0xfcf8;
至少= 15; (地址0xfcf8中的值)。希望它有所帮助。