c - 可变参数函数中的参数如何在堆栈上传递?

标签 c assembly stack

我认为该函数在完成后会从堆栈中删除参数,但像 printf 这样的函数在调用时会从堆栈中删除可变数量的参数。

它如何知道要从堆栈中删除多少个参数?是否有一个 secret 参数来指定传递多少个参数?

谢谢

最佳答案

C 调用约定指定负责从堆栈中弹出参数的是调用者,而不是被调用者。这就是为什么带有可变参数列表的函数必须是cdecl。所以,

I thought that the function removes the parameters from the stack after it's done.

这只适用于某些调用约定,但不适用于C 调用约定

How does it know how many parameters to remove from the stack? Is there a secret argument to specify how many arguments are passed?

事实并非如此,而且不存在任何 secret 争论。

关于c - 可变参数函数中的参数如何在堆栈上传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086005/

相关文章:

c - 将 2D 数组指针传递给 C 中的函数

c++ - 汇编asm x86加解密程序

linux - NASM 调用标签未被调用

ios - Clang + iOS + 汇编器跳转 : error "unsupported relocation on symbol"

function - 为什么要在函数开头保存旧的基指针?

c++ - 如何实现堆栈列表的删除功能?

使用arm-none-eabi-gcc和bool变量的编译器错误

C:带有 void 指针的可变参数函数

c - 看似随机的 opendir() 失败 C

c - 寻找组织单向火车站交通的算法中的错误