可以在函数内声明函数吗?

zoumengdiefly 2008-12-18 10:35:19
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
...全文
2631 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoumengdiefly 2009-01-13
  • 打赏
  • 举报
回复 1
呵呵,谢谢大家, 只是看到<<The c programming language>>里面很多都这样写的.所以过来问一下.
就呆在云上 2008-12-28
  • 打赏
  • 举报
回复

可以
但是是一个没有好处的做法
不算封装也算不上优美
纯属手抽筋
坐看昀起 2008-12-28
  • 打赏
  • 举报
回复 1
在C语言里面函数可以嵌套调用,但是不能嵌套申明,这是我上大学的时候老师跟我讲的!
tanwan 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 tanmeining 的回复:]
引用 9 楼 zoumengdiefly 的回复:
其实这个问题, 自己实践一下就出来了:

C/C++ code
#include <stdio.h>

int main() {
int add(int, int);
printf("%d", add(3, 4)); //可以运行.
return 0;
}

int add(int a, int b) {
return a+b;
}


#include <stdio.h>

int main() {
printf("%d", add(3, 4)); //可以运行.
return 0;
}

int add(int a, int b) {…
[/Quote]


第2个我写了一下你不声明的话不可以通过哦
__ALWAYS_RUN__ 2008-12-27
  • 打赏
  • 举报
回复
标准好像说了不可以得额、
函数默认是具有文件作用域得额
rabbito_o 2008-12-26
  • 打赏
  • 举报
回复
liberpc 2008-12-25
  • 打赏
  • 举报
回复 1
[Quote=引用楼主 zoumengdiefly 的帖子:]
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
[/Quote]

c语言不允许嵌套定义函数,可嵌套在函数体内声明函数。这关系到函数作用域的问题。
而c++是不允许这样的,编译会出错,楼主不妨编写个简单程序试试
  • 打赏
  • 举报
回复
C语言中为了使编译器的编写简单化不允许嵌套定义函数,所以为了保证可移植性,最好不这么做
zzzlll1983 2008-12-22
  • 打赏
  • 举报
回复
可以
  • 打赏
  • 举报
回复
当然可以声明

但是定义得在外面哦
猪翼天翔 2008-12-21
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lbh2001 的回复:]
C语言中为了使编译器的编写简单化,不允许嵌套定义函数,也就是不允许在函数中定义其他的函数,但允许在里面声明
[/Quote]
恩,记得《C编程专家》里有提到这个,C语言很多特征都是为了照顾编译器的,不允许嵌套定义函数也是之一。
dreamsdark 2008-12-21
  • 打赏
  • 举报
回复
不可以
0x1000 2008-12-21
  • 打赏
  • 举报
回复
个人认为这样会使整个结构变得混乱,不清晰。尤其是代码多了以后就很不容易看清楚。
stmnow 2008-12-21
  • 打赏
  • 举报
回复
gcc中不但可以声明,还可以定义函数,如函数a中定义了函数b,那么在a中递归使用b时 b可以将a中定义的变量看作
是全局变量使用。
zoumengdiefly 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 nullah 的回复:]
C/C++ code
#include <stdio.h>

int main() {
printf("%d", add(3, 4)); //可以运行.
return 0;
}

int add(int a, int b) {
return a+b;
}
//楼主确定第二个可以运行??
//我在VS2005下 编译不通过的
[/Quote]

是的, 不过我用的是c-free.vs我没装, 没试过.
piaomiaoju 2008-12-19
  • 打赏
  • 举报
回复
mark
lbh2001 2008-12-19
  • 打赏
  • 举报
回复
C语言中为了使编译器的编写简单化,不允许嵌套定义函数,也就是不允许在函数中定义其他的函数,但允许在里面声明
tanmeining 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zoumengdiefly 的回复:]
其实这个问题, 自己实践一下就出来了:

C/C++ code
#include <stdio.h>

int main() {
int add(int, int);
printf("%d", add(3, 4)); //可以运行.
return 0;
}

int add(int a, int b) {
return a+b;
}


#include <stdio.h>

int main() {
printf("%d", add(3, 4)); //可以运行.
return 0;
}

int add(int a, int b) {
return a+b;
}




都可以.不过有没有高…
[/Quote]

C编译器是首先将各函数做成函数调用表,而在main()中引用的时候其实是查找的函数在函数调用表中的地址,然后再通过此地址跳转到函数定义的地址中去,下到汇编层去理解完全没有错误,但我们要谨记,现在我们所使用的编译器,人为的加入了优化器,检验器等功能,所以此种写法在某些优化度教高的编译器中会出错,甚至不能编译通过,因为为了能写出跨平台移植的代码,谨遵标准C代码规范是关键。
yellowhwb 2008-12-19
  • 打赏
  • 举报
回复
C中没有嵌套函数,pascal中好像可以!
wiowei 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 zoumengdiefly 的帖子:]
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
[/Quote]
可以声明,可认为是C遗留问题
没好处,有些编译器不允许
C++里面函数声明都放到头文件中是个好习惯,不会出现这种问题
加载更多回复(14)

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧