相关疑难解决方法(0)

C警告函数调用中缺少标记

这是我的警告.

Missing sentinel in function call
Run Code Online (Sandbox Code Playgroud)

我怎么能删除它.

我正在使用linux和gcc编译器.

c warnings

41
推荐指数
5
解决办法
6万
查看次数

为什么在调用printf之前%eax归零?

我想拿起一点x86.我正在使用gcc -S -O0在64位mac上进行编译.

C中的代码:

printf("%d", 1);
Run Code Online (Sandbox Code Playgroud)

输出:

movl    $1, %esi
leaq    LC0(%rip), %rdi
movl    $0, %eax        ; WHY?
call    _printf
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在调用'printf'之前%eax被清除为0.由于printf返回打印的字符数量为%eax我最好的猜测,因此将其归零以准备它,printf但我认为printf必须负责准备它.而且,相反,如果我调用自己的功能int testproc(int p1),则gcc认为没有必要准备%eax.所以我想知道为什么gcc对待printftestproc不同.

macos assembly gcc x86-64 cpu-registers

32
推荐指数
3
解决办法
7918
查看次数

如何在gcc中实现变量参数?

int max(int n, ...)
Run Code Online (Sandbox Code Playgroud)

我正在使用cdecl调用约定,其中调用者在被调用者返回后清理变量.

我想知道怎么做宏va_end,va_startva_arg工作?

调用者是否将参数数组的地址作为max的第二个参数传递?

c gcc variadic-functions calling-convention

23
推荐指数
2
解决办法
1万
查看次数

为什么eax包含向量参数的数量?

为什么al包含汇编中的矢量参数数量?

为什么向量参数与被调用者的正常参数有任何不同?

assembly x86-64 abi calling-convention sysv

3
推荐指数
1
解决办法
183
查看次数