社区
C语言
帖子详情
可以在函数内声明函数吗?
zoumengdiefly
2008-12-18 10:35:19
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
...全文
2470
34
打赏
收藏
可以在函数内声明函数吗?
c语言中可以在函数内声明函数吗?这样有什么好处呢?什么时候应该这样做呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zoumengdiefly
2009-01-13
打赏
举报
回复
1
呵呵,谢谢大家, 只是看到<<The c programming language>>里面很多都这样写的.所以过来问一下.
就呆在云上
2008-12-28
打赏
举报
回复
可以
但是是一个没有好处的做法
不算封装也算不上优美
纯属手抽筋
坐看昀起
2008-12-28
打赏
举报
回复
在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)
(推荐)Win32 API大全
作为Microsoft 32位平台的应用程序编程接口, Win32 API是从事Windows应用程序开发所必备的。 首先对Win32 API
函数
做完整的概述;然后收录五大类
函数
: 窗口管理、图形设备接口、系统服务、国际特性以及网络服务; 在附录部分,讲解如何在Visual Basic和Delphi中对其调用。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。 控件与消息
函数
共91个
函数
硬件与系统
函数
共98个
函数
设备场景
函数
共73个
函数
绘图
函数
共105个
函数
位图、图标和光栅运算
函数
共39个
函数
菜单
函数
共37个
函数
文本和字体
函数
共41个
函数
打印
函数
共66个
函数
文件处理
函数
共118个
函数
进程和线程
函数
共40个
函数
Windows消息
函数
共11个
函数
网络
函数
共14个
函数
目 录 第一章 Win32 API概论…………………………………………………………………………1 1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述………………………………………………………………………………………11 第二章 窗口管理
函数
(Windows Control Function) ……………………………………13 2.1 易用特性
函数
(Accessibility Features)…………………………………………13 2.2 按钮
函数
(Button)……………………………………………………………………20 2.3 插入标记(^)
函数
(Caret)…………………………………………………………21 2.4 组合框
函数
(Combo box) ……………………………………………………………24 2.5 通用对话框
函数
(Common Dialog Box) ……………………………………………25 2.6 标
函数
(Cursor)………………………………………………………………………36 2.7 对话框
函数
(Dialog Box)……………………………………………………………40 2.8 编辑控制
函数
(Edit Control)………………………………………………………54 2.9 图标
函数
(Icon)………………………………………………………………………54 2.10 键盘加速器
函数
(Keyboard Accelerator)……………………………………… 61 2.11 键盘输入
函数
(Keyboard InPut) …………………………………………………63 2.12 列表框
函数
(List box) ……………………………………………………………75 2.13 菜单
函数
(Menu) ……………………………………………………………………76 2.14 消息和消息队列
函数
(Message and Message Queue)……………………………90 2.15 鼠标输入
函数
(Mouse Input) ……………………………………………………100 2.16 多文档接口
函数
(Multiple Document Interface) ……………………………103 2.17 资源
函数
(Resource)………………………………………………………………105 2.18 滚动条
函数
(Scroll Bar)…………………………………………………………113 2.19 窗口
函数
(Window)…………………………………………………………………119 2.20 窗口类
函数
(Window Class)………………………………………………………144 2.21 窗口过程
函数
(Window Procedure)………………………………………………150 2.22 窗口属性
函数
(Window Property) ………………………………………………152 第三章 图形设备接口
函数
(Graphic Device Interface Function) …………………155 3.1 位图
函数
(Bitmap) …………………………………………………………………155 3.2 笔刷
函数
(Brush)……………………………………………………………………171 3.3 剪切
函数
(Clipping) ………………………………………………………………176 3.4 颜色
函数
(Color)……………………………………………………………………179 3.5 坐标空间与变换
函数
(Coordinate Space Transformation)……………………186 3.6 设备环境
函数
(Device Context) …………………………………………………195 3.7 填充形态
函数
(Filled shape) ……………………………………………………211 3.8 字体和正文
函数
(Font and Text)…………………………………………………215 3.9 ICM 2.0
函数
…………………………………………………………………………238 3.10 线段和曲线
函数
(Line and Curve)………………………………………………295 3.11 图元文件
函数
(Metafile)…………………………………………………………300 3.12 多显示器
函数
(Multiple Display Monitors) …………………………………311 3.13 绘图
函数
和画图
函数
(Painting and Drawing)…………………………………313 3.14 路径
函数
(Path)……………………………………………………………………328 3.15 画笔
函数
(Pen) ……………………………………………………………………332 3.16 打印及打印假脱机程序
函数
(Printing and Print Spooler)…………………334 3.17 矩形
函数
(Rectangle) ……………………………………………………………371 3.18 区域
函数
(Region)…………………………………………………………………374 第四章 系统服务
函数
(System Service Function) ……………………………………383 4.1 访问控制
函数
(Access Control) …………………………………………………383 4.2 原子
函数
(Atom) ……………………………………………………………………406 4.3 客户/服务器访问控制
函数
(Client/Server Access Control) ………………409 4.4 剪贴板
函数
(Clipboard)……………………………………………………………431 4.5 通信
函数
(Communication)…………………………………………………………436 4.6 控制台
函数
(Console)………………………………………………………………444 4.7 数据解压库
函数
(Data Decompression Library) ………………………………463 4.8 调试
函数
(Debugging)………………………………………………………………466 4.9 设备输入输出
函数
(Device Input and Output)…………………………………472 4.10 动态数据交换
函数
(Dynamic Data Exchange) …………………………………474 4.11 动态数据交换管理
函数
(Dynamic Data Exchange Management)………………476 4.12 动态链接库
函数
(Dynamic-Link Library)………………………………………489 4.13 错误
函数
(Error) …………………………………………………………………496 4.14 事件日志
函数
(Event Logging) …………………………………………………499 4.15 文件
函数
(File)……………………………………………………………………503 4.16 文件安装库
函数
(File Installation Library) ………………………………542 4.17 文件映射
函数
(File Mapping)……………………………………………………546 4.18 文件系统
函数
File System)………………………………………………………551 4.19 句柄和对象
函数
(Handle and Object)………………………………………………556 4.20 挂钩
函数
(Hook)………………………………………………………………………560 4.21 ImageHlp
函数
…………………………………………………………………………572 4.22 大整数操作
函数
(Iarge Integer Operations)……………………………………594 4.23 低层访问控制
函数
(Low-Level Access Control)………………………………596 4.24 LSAPI
函数
…………………………………………………………………………617 4.25 邮槽
函数
(Mailslot)………………………………………………………………622 4.26 内存管理
函数
(Memory Management) ……………………………………………623 4.27 管道
函数
(Pipe) …………………………………………………………………655 4.28 电源管理
函数
(Power Management) …………………………………………… 663 4.29 进程和线程
函数
(Process and Thread)…………………………………………666 4.30 注册表
函数
(Registry)……………………………………………………………700 4.31 字符串操作
函数
(String Manipulation)……………………………………… 724 4.32 结构化异常处理
函数
(Structured Exception Handling) ……………………742 4.33 同步
函数
(Synchronization) ……………………………………………………745 4.34 系统信息
函数
(System Information)……………………………………………766 4.35 系统消息
函数
(System Message)…………………………………………………780 4.36 系统关机
函数
(System Shutdown) ………………………………………………781 4.37 磁带备份
函数
(Tape Backup) ……………………………………………………783 4.38 时间
函数
(Time)……………………………………………………………………789 4.39 计时器
函数
(Timer) ………………………………………………………………795 4.40 工具帮助
函数
(Tool Help) ………………………………………………………796 4.41 窗口站和桌面
函数
(Window Station and Desktop)……………………………799 4.42 Windows NT 4.0访问控制
函数
(Window NT 4.0 Access-Control)……………808 4.43 WinTrust
函数
(WinTrust)…………………………………………………………814 第五章 国际特性
函数
(International Peatures Punction)时性…………………………815 5.1 输入方法编辑
函数
(Input Method Editor)…………………………………………815 5.2 国家语言支持
函数
(National Language Support)………………………………… 828 5.3 Unicode和字符集
函数
(Unicode and Character Set)……………………………… 843 第六章 网络服务
函数
(Networding Service Function)……………………………………849 6.1 数据链路控制
函数
(DLC)………………………………………………………………849 6.2 网络
函数
(Net)…………………………………………………………………………849 6.3 NetBIOS
函数
……………………………………………………………………………896 6.4 网络DDE
函数
(Networking DDE)……………………………………………………897 6.5 RAS服务器管理
函数
(RAS Server Administration)………………………………901 6.6 远程访问服务
函数
(Remote Access Administration)………………………………910 6.7 服务
函数
(Service)……………………………………………………………………929 6.8 Windows网络
函数
(Windows Networking)……………………………………………930 附录1 如何在VB中调用DLL API ……………………………………………………………945 1 DLL API的
声明
……………………………………………………………………………945 2 DLL API的调用……………………………………………………………………………947 附录2 在Delphi中直接调用Windows API…………………………………………………953
c++ primer第五版第6章答案
c++ primer第五版第6章答案
C/C++指针经典资料大全
C/C++指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
golang
函数
内
声明
函数
做力扣的二叉树中序遍历时学习到,golang不支持
函数
内直接
声明
函数
,但是支持
函数
内使用匿名
函数
,或者创建
函数
类型的变量。 如: func main() { func say() { // 这里会包语法错误,不能在main
函数
内
声明
函数
。 fmt.Println("Hello") } } 但是可以使用变量
声明
: func main() { say := func() { fmt.Println("Hello") } } 或者
【C++面试问答】虚
函数
可以
声明
为inline吗
在程序中的每个调用点将
函数
体展开,而不是按照通常的
函数
调用机制取调用,从而减少调用
函数
花费的额外开销。虚
函数
一般不能
声明
为inline的,因为inline
函数
是在编译期将
函数
内容替换到
函数
调用处的,是静态编译的。● 通常只有
函数
非常短小的时候(如10行代码内)才适合定义成inline
函数
,否则会导致程序变慢。● 定义在class内的成员
函数
默认是inline
函数
(虚
函数
除外),因为虚
函数
是在运行时动态调用的,编译器并不知道它绑定的是哪个对象。● (缺点)inline
函数
会增加执行文件的大小。
C语言
70,005
社区成员
243,256
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章