What's the side effect of the following macro in C ? Embedded C

前端 未结 4 1078
野趣味
野趣味 2020-12-07 02:39
#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 :

lea         


        
相关标签:
4条回答
  • 2020-12-07 03:05

    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.

    0 讨论(0)
  • 2020-12-07 03:06

    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.

    0 讨论(0)
  • 2020-12-07 03:07

    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).

    0 讨论(0)
  • 2020-12-07 03:08

    *p++ gets evaluated twice as the macro expands to *p++ <= b ? *p++ : b

    Also, there is no such thing as "embedded C".

    0 讨论(0)
提交回复
热议问题