为什么“C语言既可以嵌套定义又可以递归调用”是错的?

如题所述

C语言可以递归调用,但是(函数)不能嵌套定义。

例如:

int fact(int n)
{
    if (n == 0)
        return 1;
    else
        return n * fact(n - 1);
}

图中的递归调用是允许的。

而:

void foo()
{
    void bar()
    {
        // Some code
    }
}

这样在函数内定义函数是不允许的。


不过结构体是可以嵌套定义的,例如:

struct test {
    int a;
    struct demo {
        char b;
    };
};

这样在结构体内定义结构体,是可以的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-29
在c语言中可以进行递归调用和嵌套调用,不能进行嵌套定义。
递归调用:
void moon()
{
static int b=3;
printf("#");
if(b>0){
b--;
moon();
}
}这样就是运行了三次moon()函数,为递归调用。
嵌套调用:
void moon()
{
static int b=3;
printf("#");
if(b>0){
b--;
Max();
}
}
在一个函数中调用不同函数便为嵌套调用。
嵌套定义:
void moon()
{
static int b=3;
printf("#");
Max(){
printf("#");
}
}这种就是嵌套定义,在一个函数中定义不同函数,这种在c语言中并不允许。在一个函数中定义相同函数便为递归定义,照样是不正确的。
第2个回答  2012-08-20
因为中国那帮老头子迂腐!!

99年后的C语言就支持了,尽信书不如无书,用Dev C++或者Codeblocks测试一样就会发现,C语言完全支持函数嵌套定义,这是C99国际标准里的新规定,C99的一个新特性。实践是检验真理的唯一方法,既然写了代码,为什么不编译一下呢?或者在古老的VC6.0里编译不了,那,试试最新的VC呢?最新版的VC试一试?就是看不惯一些人人云亦云,把真理埋没了。
第3个回答  推荐于2017-11-21
不可以嵌套定义的,只能递归调用本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网