所以在我意外地做到这一点之前,我从未意识到这一点。以下是我拥有的方法标题:
void processI_TypeInstruction(char *I_TypeInstruction, char* currentLine,
FILE *outputFilePointer, VariableVector *labelVector);
我对此方法的一个调用如下所示:
processI_TypeInstruction("lw", line1, outputFile);
我的所有测试都通过,一切正常。我想知道C做什么使这个功能工作???感谢。
答案 0 :(得分:3)
在该次调用的文件中,您不得拥有processI_TypeInstruction
{{1}}的头文件。
C中不需要函数原型。如果函数没有原型,编译器不会假设参数的数量,因此它允许您在函数调用中传递任意数量的参数。这是原始语言的行为。直到1989 C标准才添加功能原型。
调用有效,因为prototype让调用者清理堆栈。由于调用者知道传递了多少参数,因此它可以清除它传递的所有参数。当然,如果函数试图访问一个参数,那么它将读入未初始化的堆栈空间,谁知道会发生什么。
答案 1 :(得分:1)
这绝对应该是C中的编译错误,但是,C ++确实支持函数重载(相同的函数名,不同的参数个数,不同的函数签名)......