<返回更多

C语言函数,如何嵌套定义和调用?

2021-07-03  今日头条  峰哥linux编程学堂
加入收藏

8 函数嵌套调用

我们学习了函数的定义和使用,那么,函数在被调用之前,必须先进行定义或者声明。

如下是一个程序测试例子:

C语言函数,如何嵌套定义和调用?

 

程序运行结果如下:

C语言函数,如何嵌套定义和调用?

 

可以看到,在main函数中调用了func函数。就是说:函数调用了函数;那么,我们称为:函数嵌套调用。

注意:不能够在函数中定义函数,就是不能够“嵌套定义函数”。我们不可以把func函数的定义放在main函数的定义中。例如:

int main(int argc, char* argv[])

{

//定义func函数

void func(int a)

{

printf("in func, a = %dn", a);

}

func(6);

return 0;

}

注意:这样的代码,在VC编译器,或者Visual Studio编译器中,是非法定义的代码。

这样的代码是错误的,虽然在func函数的调用之前,定义了func函数。但是,不能够在main函数中定义func函数,就是不能够嵌套定义函数。

但是,在Ubuntu系统的GCC编译器中,支持嵌套定义函数的语法。

虽然GCC支持这样的语法,但是,我们不建议嵌套定义函数。这样的语法,是不提倡的写法。不便于代码的移植。

但是,函数可以嵌套调用,就是在函数的定义中,调用其他函数,程序测试例子如下:

注意:下面的例子,作者举例有些复杂,在分析的过程中,还分析函数的返回值等数据的传递。如果只是说明函数的嵌套调用,那么,没有那么复杂。很简单,就是:在一个函数中,调用一个函数,这就是函数的嵌套调用。

下一章节,我们讲解函数的递归调用,才是重点。

C语言函数,如何嵌套定义和调用?

 

程序运行结果如下:

C语言函数,如何嵌套定义和调用?

 

我们来分析该程序的执行过程如下:

(1) 定义了main函数,是程序的入口地址;程序从main函数开始执行;

(2) 在main函数中调用func3函数,执行到 int x = func3(); 代码的时候,就跳转到func3函数执行;

(3) 在func3函数中调用func2函数,执行到 int c = func2(); 代码的时候,就跳转到func2函数执行;

(4) 在func2函数中调用func1函数,执行到int b = func1(); 代码的时候,就跳转到func1函数执行;

(5) 此时,一步一步嵌套调用函数,调用到func1函数,执行func1函数体定义的代码,执行:

printf("in func1, a = %dn", a);

输出调试代码,然后,执行return a; 返回变量a的值;

(6) 结束func1函数的调用,返回到func2函数的int b = func1(); 代码,此时,把func1函数的返回值赋给变量b,那么,变量b得到func1函数的返回值10。

(7) 继续执行func2函数的代码:

printf("in func2, b = %dn", b);

return b;

此时,在func2函数中输出信息,然后,返回变量b的值;

(8) 结束func2函数的调用,返回到func3函数的int c = func2(); 代码,此时,把func2函数的返回值赋给变量c,那么,变量c得到func2函数的返回值12。

(9) 继续执行func3函数的代码:

printf("in func3, c = %dn", c);

return c;

输出调试信息,然后,返回变量c的值。最终,结束func3函数的调用,返回到main函数的int x = func3(); 代码,此时,结束func3函数的调用,把返回值赋给变量x。在main函数中输出变量x的值。执行完main函数之后,结束程序的运行。

通过这个程序的分析,我们知道了函数的嵌套调用,就是在函数中调用函数。碰到调用函数时,就跳转到函数定义的函数体中运行。例如,在main函数中调用func3函数的时候,就跳转到func3函数定义函数体中运行。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>