Quiz:
What will the following code print?
int i = 5;
printf("%d ", i++ * i++);
printf("%d\n", i);
One of the first things most C programmers learn “on the job” is that you can’t know when i++
will take place. For example, the following is undefined:
char a[10];
int i=5;
a[i] = ++i;
However, one might think that in the code above, the first i++
will be evaluated as 5, and then the second will start out at 6 (and be increased to 7 after the multipication).
That is not guaranteed. On my PC, gcc returns 25 7
for the code above.
Even more interesting is the following snippet:
int i;
i=5;
printf("%d %d %d\n", i++, i * i++, i);
i=5;
printf("%d %d %d\n", i, i * i++, i++);
This prints:
6 25 7
7 36 5
Yikes.
Moral? Don’t be too clever!