It seems sizeof is not a real function?
for example, if you write like this:
int i=0;
printf(\"%d\\n\", sizeof(++i));
printf(\"%d\\n\", i);
>
You know, there's a reason why there are standard documents (3.8MB PDF); C99, section 6.5.3.4, §2:
The
sizeofoperator 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 response to ibread's comment, here's an example for the C99 variable length array case:
#include
size_t sizeof_int_vla(size_t count)
{
int foo[count];
return sizeof foo;
}
int main(void)
{
printf("%u", (unsigned)sizeof_int_vla(3));
}
The size of foo is no longer known at compile-time and has to be determined at run-time. The generated assembly looks quite weird, so don't ask me about implementation details...