gpt4 book ai didi

c - c 如何允许不传递所有参数?

转载 作者:行者123 更新时间:2023-11-30 18:31:48 25 4
gpt4 key购买 nike

所以我从来没有意识到这一点,直到我不小心做到了。以下是我的方法 header :

void processI_TypeInstruction(char *I_TypeInstruction, char* currentLine,
FILE *outputFilePointer, VariableVector *labelVector);

我对此方法的调用如下所示:

processI_TypeInstruction("lw", line1, outputFile);

我的所有测试都通过了,一切正常。我想知道 C 做了什么才能使这个功能发挥作用???谢谢。

最佳答案

您的头文件不得带有 prototype对于包含该调用的文件中的 processI_TypeInstruction

C 中不需要函数原型(prototype)。如果函数没有原型(prototype),编译器不会假设参数的数量,因此它允许您在函数调用中传递任意数量的参数。这是原始语言的行为。直到 1989 年 C 标准才添加函数原型(prototype)。

该调用之所以有效,是因为 C calling convention让调用者清理堆栈。由于调用者知道传递了多少个参数,因此它可以清理它传递的所有参数。当然,如果函数尝试访问参数,那么它将读入未初始化的堆栈空间,谁知道会发生什么。

关于c - c 如何允许不传递所有参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170814/

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