#define MIN(A,B) ((A) <= (B) ? (A) : (B))
this is the macro , I was asked what's the side effect if I used the following :
least = MIN(*p++, b);
Note: This was embedded c question
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
this is the macro , I was asked what's the side effect if I used the following :
least = MIN(*p++, b);
Note: This was embedded c question
It evaluates p++
twice. Also, since the first evaluation changes p
, the second time around it will point to a different element. So the returned value will be *(initialp + 1)
or b
.
You should try it yourself.
The macro will expand to:
least = ((*p++)<=(b)?(*p++):(b))
you will have then *p++
twice in your statement (i.e., it will be incremented twice).
*p++
gets evaluated twice as the macro expands to *p++ <= b ? *p++ : b
Also, there is no such thing as "embedded C".
Assume initial address of p = 0xfcf0, *p = 1, b = 2, value @ 0xfcf4 = 5 and value @ 0xfcf8 = 15
The macro will expand as
least = ((*p++) <= (b) ? (*p++) : (b));
i.e least = ((1) <= (2) ? (*p++) : (b));
since *p is incremented twice.
1) *p++ --> now p will point to address 0xfcf4;
2) *p++ --> now p will point to address 0xfcf8;
So least = 15; (the values in the address 0xfcf8). Hope it helps.