- 论坛徽章:
- 2
|
"printf"的返回值是实际打印的字符的个数,有一个小程序
- #include<stdio.h>
- int main()
- {
- printf("1");
- printf("55555");
- printf("10________");
- printf("13___________");
- printf("18________________");
- printf("28__________________________");
复制代码 它会打印
15555510________13___________18________________28__________________________
然后我用gdb来调试,查看每步之后,printf是不是把返回值放到$eax里面了:
- (gdb) b main
- Breakpoint 1 at 0x804844c: file testp.c, line 4.
- (gdb) r
- Starting program: /home/a/cpp/a.out
- Breakpoint 1, main () at testp.c:4
- 4 printf("1");
- (gdb) n # 我认为将会把"1"放入eax
- 5 printf("55555");
- (gdb) p $eax # 和我的预期不一致
- $1 = 49
- (gdb) n
- 6 printf("10________");
- (gdb) p $eax # 符合预期
- $2 = 5
- (gdb) n
- 7 printf("13____________");
- (gdb) p $eax # 符合预期
- $3 = 10
复制代码 我认为c语言的abi是规定了函数的返回值放到eax寄存器(x86架构),那么为什么第一次p $eax不符合我的预期,后面才符合预期?
谢谢。
|
评分
-
查看全部评分
|