Here is the code compiled in dev c++ windows:
#include
int main() {
int x = 5;
printf(\"%d and \", sizeof(x++)); // note 1
print
sizeof(foo)
tries really hard to discover the size of an expression at compile time:
6.5.3.4:
The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined from the type of the operand. The result is an integer. If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant.
In short: variable length arrays, run at runtime. (Note: Variable Length Arrays are a specific feature -- not arrays allocated with malloc(3)
.) Otherwise, only the type of the expression is computed, and that at compile time.