你这个问题看似简单,其实涉及到了函数的声明与定义,以及C语言的标准规范和具体编译器的实现问题。
从标准规范来看:
C语言允许函数里声明函数,但是不建议这么写,因为不利于多文档的组织。
C语言禁止函数里定义函数,但是个别编译器却没遵循标准。
C语言的标准和编译器的实现并不是完全统一,为了可移植性,建议一切都按C语言标准中推荐的做法来写。
我还写了个代码附带注释,程序在CFree这个IDE(内置gcc编译器)上运行是通过的,但是在VC++6上就可能通不过了,主要是编译器具体实现不同。
#include
//函数外
//声明,允许,推荐的做法
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;
}