我认为该函数在完成后会从堆栈中删除参数,但像 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/