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

c如何允许您不传递所有参数?,c,parameters,parameter-passing,C,Parameters,Parameter Passing,所以直到我不小心做了,我才意识到这一点。以下是我的方法标题: void processI_TypeInstruction(char *I_TypeInstruction, char* currentLine, FILE *outputFilePointer, VariableVector *labelVector); 我对此方法的一个调用如下所示: processI_TypeInstruction("lw", line1, outputFile); 我所有的测试都通过了,一切

所以直到我不小心做了,我才意识到这一点。以下是我的方法标题:

void processI_TypeInstruction(char *I_TypeInstruction, char* currentLine,
        FILE *outputFilePointer, VariableVector *labelVector);
我对此方法的一个调用如下所示:

processI_TypeInstruction("lw", line1, outputFile);

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

这肯定是C中的编译错误,但是C++支持函数重载(相同的函数名、不同的参数数、不同的函数签名)…

在调用该文件的文件中,不能有头文件,而不是“代码< > Prassisix Type指令<代码>”。 C中不需要函数原型。如果函数没有原型,编译器不会对参数的数量进行假设,因此它允许您在函数调用中传递任意数量的参数。这是原始语言的行为。直到1989年的C标准,功能原型才被添加


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

讨厌是迂腐的,但是在C中说方法不是有点傻吗?你确定是C而不是C++吗?有没有方法检查Eclipse?我不知道。尝试声明一个类并查看它是否编译<代码>类FoBar {} /COD>。因为不同于C,C++支持默认参数值和函数重载等特性,这意味着只要它们接受不同的参数,就可以有许多相同名称的函数。C不支持重载。但编译器在决定调用
的地址时,仍然需要知道“他在说什么函数”,因此要在某个点成功编译,必须连接点,当它这样做时,我不认为它会忽略函数声明。虽然我知道你所说的堆栈是正确的,但我不知道编译器如何在“意外”允许同时发生这种情况的情况下完成它的工作。@Havenard-不,编译器不需要知道这一点。C将每个文件编译为一个独立的单元。如果函数实现了另一个文件,编译器对另一个函数一无所知。它所做的只是存储函数的名称,并让链接器钩住调用,而链接器没有关于函数采用什么参数的信息,它只有一个名称。