- 论坛徽章:
- 0
|
倒是纠正了我的想法,我一直觉得常量计算在预编译里,今天用gcc -E一看居然没有计算。
cat ./a.c
void main(void)
{
int a=1<<10;
}
cat tmp/a.c
void main(void)
{
int a=1<<(5*2);
}
gcc -E a.c 与 cd tmp, gcc -E a.c 有差异,所以应该不是预编译就计算了
gcc -S a.c 与 cd tmp, gcc -S a.c 一样,编译计算,2种写法没差别
.file "a.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $1024, -4(%ebp) 已经计算成了1024
leave
ret
.size main, .-main
.ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
.section .note.GNU-stack,"",@progbits
diff a.s tmp/a.s 生成的汇编一样
diff a tmp/a 生成的可执行程序一样 |
|