- 论坛徽章:
- 0
|
本帖最后由 davidfoxhu 于 2011-08-24 17:14 编辑
C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算sizeof值;
sizeof是在编译时确定的,不是运行时确定;
把你的代码输出成汇编,结果如下:
.file "main.c"
.text
.globl f
.type f, @function
f:
pushl %ebp
movl %esp, %ebp
movl $0, %eax
popl %ebp
ret
.size f, .-f
.section .rodata
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, %eax
movl $1, 4(%esp) ;这里根本就不计算,直接赋值1,跟函数f也没任何关系
movl %eax, (%esp)
call printf
movl $0, %eax
leave
ret
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
.section .note.GNU-stack,"",@progbits |
|