C 中函数的默认参数 --

问题描述 投票:0回答:1

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

我在 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。那么编译器会通过哪一个呢?

我尝试在 Google 上查找,但尚未找到明确的来源。

c gcc
1个回答
3
投票

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

碰巧,堆栈上寻找参数的东西是

t
函数中的局部变量
main()
。如果
main()
中有更多的局部变量,那么其中一个变量就会被误解为函数的参数,事情就会变得严重错误。

所以,它的工作纯粹是偶然的。

© www.soinside.com 2019 - 2024. All rights reserved.