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语言中,在一个自定义函数里面只能调用一个自定义函数吗?可以调用多个吗?如果可以怎么调用?