C语言中不能在函数里面声明函数吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中不能在函数里面声明函数吗相关的知识,希望对你有一定的参考价值。

  你这个问题看似简单,其实涉及到了函数的声明与定义,以及C语言的标准规范具体编译器的实现问题。


  从标准规范来看:

    C语言允许函数里声明函数,但是不建议这么写,因为不利于多文档的组织。

    C语言禁止函数里定义函数,但是个别编译器却没遵循标准。

    C语言的标准编译器的实现并不是完全统一,为了可移植性,建议一切都按C语言标准中推荐的做法来写。


  我还写了个代码附带注释,程序在CFree这个IDE(内置gcc编译器)上运行是通过的,但是在VC++6上就可能通不过了,主要是编译器具体实现不同。

#include <stdio.h>

//函数外 
//声明,允许,推荐的做法 
int add1(int a, int b);

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

//函数内
//声明,允许,但是不建议这么写 
int add2(int a, int b);

//C语言标准里禁止函数内定义函数、
//但是有个别编译器也允许这样做,比如GCC
//此种写法不通用,强烈不建议使用 
int add3(int a, int b)

return a+b;
 

//C99标准中,调用函数之前,必须保证声明已出现过 
printf("%d\\n", add1(1,2));
printf("%d\\n", add2(2,3));
printf("%d\\n", add3(3,4));

return 0;


//函数外 
//定义,允许
int add1(int a, int b)

return a+b;


//定义,允许
int add2(int a, int b)

return a+b;


  -->您的采纳是我们的动力<--

参考技术A C语言中可以在函数里面声明函数,但是不能在函数里面定义函数。

C 语言程序中子函数能不能调用子函数本身?

可以。嵌套调用或递归调用子函数。

在C语言中,函数嵌套允许在一个函数中调用另外一个函数。例如
funca()

funcb();

这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。

而递归,是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个人要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……以此类推的思考,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。例如
funca()

if(statement1)
funca();
else
exit(0);
递归最明显的特点就是,自己调用自己(就是函数嵌套调用)
参考技术A 可以的,自己调用自己,就是递归调用,很多算法都是递归算法
#include <iostream>
using namespace std:
int funtion(int n)

if(n == 0)

return 0;

if(n==1)

return 0;

return n&funtion(n-1);

int main(int argc,char **argv)

int n = 9;
int result;
result = funtion(n);
cout<<result<<endl;
return 0;
参考技术B 可以,这叫递归本回答被提问者采纳

以上是关于C语言中不能在函数里面声明函数吗的主要内容,如果未能解决你的问题,请参考以下文章

c语言中,在一个自定义函数里面只能调用一个自定义函数吗?可以调用多个吗?如果可以怎么调用?

C中 函数声明 要在main函数之前之解决?

C语言中运行中,main函数被重复定义,后面的就不能运行了怎么办,下午考试,求高手

C语言中函数为啥可以嵌套定义 ?

C语言 main()前可以放哪些限定的函数!?

c语言局部变量可以被其他的原文件引用吗