社区
C语言
帖子详情
可以在函数内声明函数吗?
zoumengdiefly
2008-12-18 10:35:19
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
...全文
2631
34
打赏
收藏
可以在函数内声明函数吗?
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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++是不允许这样的,编译会出错,楼主不妨编写个简单程序试试
半吊子全栈工匠
2008-12-22
打赏
举报
回复
C语言中为了使编译器的编写简单化不允许嵌套定义函数,所以为了保证可移植性,最好不这么做
zzzlll1983
2008-12-22
打赏
举报
回复
可以
青葱岁月不可追
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)
函数
的
声明
和定义
函数
声明
1.让编译器知道
函数
的名字,参数,返回类型.但是具体是否存在,无关紧要. 2.
函数
的
声明
一般出现在
函数
的使用之前,一定要先
声明
在使用. 3.
函数
的
声明
一般要放在头文件中.
函数
定义
函数
的定义就是指
函数
的具体实现方式,交代清楚
函数
的功能. 通过例子来看
函数
声明
和
函数
定义. //
函数
定义 double Add(double x, double y){ return x+y; } //
函数
...
函数
定义、
函数
声明
、
函数
原型
函数
定义带有
函数
体,
函数
声明
≈
函数
原型 void threeline(void); 当
函数
声明
宣示了
函数
的名字、参数类型和个数、返回值类型,它就叫
函数
原型。 只有带
函数
体的才叫定义。
函数
体后头不加;号
函数
原型后面由分号;结尾。 由于有 Old Style C 语法的存在,并非所有
函数
声明
都包含完整的
函数
原型 如 void threeline();这个
声明
并没有明确指出参数类型和个数,所以不算
函数
原型。 只有分配存储空间的变量
声明
才叫变量定义, 其实
函数
也是一样,编译器只有见到
函数
定义才会生成指令,而.
函数
的
声明
与定义
学好C语言
C++
函数
的
声明
和定义
在程序中使用
函数
时,你必须先
声明
它然后再定义,
声明
的目的是告诉编译器你即将要定义的
函数
的名字是什么,返回值的类型是什么以及
函数
是什么。而定义则是告诉编译器这个
函数
的功能是什么。假如我们不
声明
,那么该
函数
就不能被其他
函数
调用。通常我们把
函数
声明
叫做
函数
原型,而把
函数
定义叫做
函数
实现。
函数
的
声明
: 如:int Add(int, int); 1,在C++中,
函数
原型就是函...
C
函数
声明
,
函数
原型,
函数
定义
函数
声明
的发展1 隐式
函数
声明
implicit function declaration main
函数
和 printf
函数
返回值类型为 int, 若不
声明
, 编译器默认
函数
返回值为 int 类型 C90标准起,这种写法就步入了被逐步抛弃的过程(尽管当时还没有完全立即废止) C99废除了隐式
函数
声明
法则(remove implicit function declaration), 省略main(
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章