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

时间:2013-11-24 03:41:49

标签: c parameters parameter-passing

所以在我意外地做到这一点之前,我从未意识到这一点。以下是我拥有的方法标题:

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

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

processI_TypeInstruction("lw", line1, outputFile);

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

2 个答案:

答案 0 :(得分:3)

在该次调用的文件中,您不得拥有processI_TypeInstruction {{1}}的头文件。

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

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

答案 1 :(得分:1)

这绝对应该是C中的编译错误,但是,C ++确实支持函数重载(相同的函数名,不同的参数个数,不同的函数签名)......