Why is the sizeof operator not evaluated in a for loop condition?

The problem is , the result of sizeof() operator is of type size_t, which is an unsigned type.

Next, in the comparison, i <= sizeof(i) as per the usual arithmetic conversion rules, -2, which is a signed value, gets promoted to an unsigned value, producing a huge value, evaluating the condition to false. So the loop condition is not satisfied and the loop body is not executed.

Run your program through a debugger and see the values in each step, it'll be more clear to you once you see the promoted values in the comparison.

sizeof yields a value of unsigned type variety (size_t). The i is converted to that type and the comparison executed as

(size_t)-2 <= 4

something like 4000000000 < 4

you need to typecast sizeof(i) into int. that should solve the problem.

so just replace for(int i = -2; i <= sizeof(i); i++) with for(int i = -2; i <= (int) sizeof(i); i++)