谢谢楼上的指出,不过我还是能分清宏定义和方法的定义。我只是觉得,方法中的参数没有定义类型,没见过。但宏定义是可以这么做的。
没有指定x的类型,传不进去,x=0,返回0,ret=0。
鉴定完毕。
我是真相帝,欧耶
080483b4 <sqr>: double sqr(x) { 80483b4: 55 push %ebp 80483b5: 89 e5 mov %esp,%ebp 80483b7: 83 ec 04 sub $0x4,%esp #这里双精度应该偏移8个就对了 return (x*x); 80483ba: 8b 45 08 mov 0x8(%ebp),%eax 80483bd: 0f af 45 08 imul 0x8(%ebp),%eax 80483c1: 89 45 fc mov %eax,-0x4(%ebp) 80483c4: db 45 fc fildl -0x4(%ebp) } 80483c7: c9 leave 80483c8: c3 ret 080483c9 <main>: int main(void) { 80483c9: 55 push %ebp 80483ca: 89 e5 mov %esp,%ebp 80483cc: 83 e4 f8 and $0xfffffff8,%esp 80483cf: 83 ec 18 sub $0x18,%esp double ret; ret = sqr(3.0); 80483d2: dd 05 b0 84 04 08 fldl 0x80484b0 80483d8: dd 1c 24 fstpl (%esp) 80483db: e8 d4 ff ff ff call 80483b4 <sqr> 80483e0: dd 5c 24 10 fstpl 0x10(%esp) return 0; 80483e4: b8 00 00 00 00 mov $0x0,%eax }开始以为是9,调试了下的确是0.