C中函数的默认参数 -

时间:2012-11-20 17:34:32

标签: c gcc compiler-construction

我是初学者,如果我超越任何规则,请道歉。这是我的问题。

我在Codeblocks上使用GCC编译器,我注意到了一些特殊的代码片段。我希望有人可以对此有所了解。

int main()
{
Tree *t;
//some operations on the tree
traverse();// No parameter is passed here.
...
}

void traverse(Tree *t)
{
..
}

在以下代码中,函数traverse()正确执行。我的问题是为什么?我不确定这一点,但如果未声明函数,则其默认类型为int。现在,编译器不仅在编译时抑制了错误,而且还正确地将参数't'提供给函数traverse()。

这是因为智能编译器设计吗?

所以一般来说:我遇到的问题是 - 如果遇到尚未声明的方法,编译器会默认采取什么行为?更重要的是,它如何“知道”我想传递哪个参数?

如你所知,我可以有三个“Tree *”实例:t1,t2和t3。编译器会通过哪一个?

我尝试在谷歌上四处寻找,但尚未找到明确的来源。

感谢您的时间。 :)

1 个答案:

答案 0 :(得分:3)

该函数正在堆栈中查找其参数。该函数不知道它所期望的参数实际上并不存在。

偶然地,它正在寻找参数的堆栈上的东西是t函数中的局部变量main()。如果你在main()中有更多的局部变量,那么其中一个会被误解为函数的参数,事情就会出错了。

所以,它纯粹是偶然的。