gpt4 book ai didi

c - 在 C 中以相反的顺序传递参数有什么意义?

转载 作者:太空狗 更新时间:2023-10-29 17:22:13 32 4
gpt4 key购买 nike

当在 C 中进行函数调用时,参数以相反的顺序传递。这很重要,这样我们才能访问第一个参数。这一些如何支持可变参数。我不明白,即使您可以访问第一个参数,您仍然需要知道该函数有多少个参数,否则您可能很容易跳过最后一个参数并开始将无效值视为参数。

如果需要参数计数,则以相反的顺序传递参数没有意义,因为您可以使用 (sp - 2 * number_of_arguments, sp = stack pointer.

以相反顺序传递参数也应该有助于递归调用,我不明白如何。

提前谢谢你。

最佳答案

C 没有定义参数传递的顺序。事实上,一些非常常见的调用约定(如 x86-64 SYSV ABI)在寄存器中传递前几个参数,完全没有顺序。

然而,对于可变参数列表函数来说,将它们的参数从最后一个推到第一个是很常见的。这是因为为被调用函数发出的代码必须与传递的任意数量的附加参数一起使用。你是对的,调用约定可以包括传递额外参数的数量——但以相反的顺序传递参数意味着这不是必需的,所以它是一个更简单的选项。你是对的,在这个方案下很容易开始检查超出最后传递的参数的值 - 例如,如果你为给定的格式字符串向 printf() 传递的参数不足,就会发生这种情况。

具有固定数量参数的函数可以按任意顺序传递,事实上从左到右的调用约定确实存在(16 位 Windows API 使用这样的调用约定)。

关于c - 在 C 中以相反的顺序传递参数有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690322/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com