c - Weird result from a macro while using pre-increment and post-increment operators -


this question has answer here:

i 12 , 49 code

#include <stdio.h> #define product(a) a*a  int main() {     int = 3, j, k;     j = product(i++);     k = product(++i);     printf("%d %d\n", j, k);      return 0; } 

if instead of using macro use function 9 , 25, expect...

can explain why happen?

if expand macro, line

j = product(i++); 

becomes

j = i++*i++; 

and line

k = product(++i); 

becomes

k = ++i*++i; 

both these lines subject undefined behavior. can try make sense of 1 run of program results not guaranteed same different compiler or same compiler different compiler flags.

when use function call instead of macro, behavior of code more straight forward. line

j = product(i++); 

is equivalent to:

int temp = i; j = product(temp); i++; 

the line

k = product(++i); 

is equivalent to:

++i; k = product(i); 

hence, there no problems when function used instead of macro.


Comments

Popular posts from this blog

wordpress - (T_ENDFOREACH) php error -

Export Excel workseet into txt file using vba - (text and numbers with formulas) -

Using django-mptt to get only the categories that have items -