为什么C++语言不允许在一个函数的定义中再定义另一个函数? 举个例子说明,谢谢

如题所述

c++中允许函数的嵌套调用,但不允许函数的嵌套定义,例如:

#include<iostream.h>
int SwpInt(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
return a;
}
void main()
{
int e=12;
int f=89;
SwpInt(&e,&f);
cout<<e<<endl<<f<<endl;
}
这样定义是对的,但是如果如下定义就会出现编译错误:

#include<iostream.h>
void main()
{
int e=12;
int f=89;
int SwpInt(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
return a;
}
SwpInt(&e,&f);
cout<<e<<endl<<f<<endl;
}

error C2601: 'SwpInt' : local function definitions are illegal
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-15
编语言的人就这么设计啊,你如果会编的话自己设计一个语言就能作到在一个函数的定义中再定义另一个函数了
第2个回答  2011-11-15
//头文件test.h
void f();
//源文件test.cpp
#include"test.h"
void f(){... g();...}
提示找不到函数g().

一般函数的声明与定义放在不同文件中,声明的头文件中只有嵌套定义的外层函数,嵌套在函数f中的函数是找不着的。。。追问

声明的头文件中只有嵌套定义的外层函数,嵌套在函数f中的函数是找不着的。。。
这句话是什么意思啊? 举个例子解释一下

追答

上面例子中,头文件中只有函数f的声明,没有函数g的声明,而在源文件中,函数f实现时要调用g,但g是没有声明的。。。这样解释有点牵强

其实这个限制就是C++的一个规则,它的编译器通不过,但使用gcc貌似就允许嵌套定义,比如下面的程序在gcc下是可以的
int main()
{void print(){cout<<"function defined in main"<<endl;}
print(); return 0;}

本回答被网友采纳
相似回答