首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
C/C++
C语言
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
宏和函数
[已结贴,结贴人:Jerrylearnc]
加为好友
发送私信
在线聊天
Jerrylearnc
Jerry
等级:
可用分等级:
贫农
总技术分:
77
总技术分排名:
103407
揭贴率:
90.67%
发表于:
2008-08-08 07:35:08
楼主
最近遇到两个概念
宏和函数
这两个有什么区别呢?
还有就是固有函数生成内嵌代码运行库程序 是什么意思
这是在单片机里看到的
问题点数:
20
回复次数:
13
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dding_inshili
阿布才
等级:
可用分等级:
贫农
总技术分:
191
总技术分排名:
61526
发表于:
2008-08-08 07:53:18
1
楼 得分:
10
宏和函数有着本质的区别:
1,函数是在运行是分配临时内存空间的, 而宏是在编译阶段展开的,另外, 在展开的时候并不分配内存空间,也不进行值的传递, 更是没有什么返回值。
2,函数调用是先求出实参表达式,然后带入形参; 而宏只是进行简单的字符串替代。
3,函数的形参的参数类型有着严格的规定, 而宏中的参数是不严格的。
4,函数的调用过程要占用一系列处理时间,而宏的展开只占用编译时间,不占用运行时间。
例子:
#define max(a, b) ( (a>b)?a:b )
/*宏*/
int max(int a, int b);
/*函数的声明*/
...................
...................
int max(int a, int b)
/*函数的实现部分*/
{
...........
}
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
babyvox1999
不给分就围观~~
等级:
可用分等级:
富农
总技术分:
3002
总技术分排名:
7004
发表于:
2008-08-08 08:24:09
2
楼 得分:
0
baidu google
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hkfybnjt
dssdf
等级:
可用分等级:
短工
总技术分:
0
总技术分排名:
313963
发表于:
2008-08-08 08:43:58
3
楼 得分:
0
该回复于2008-08-08 09:12:05被版主删除
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lunarfan
简洁就是美
等级:
可用分等级:
中农
总技术分:
851
总技术分排名:
24488
发表于:
2008-08-08 09:55:39
4
楼 得分:
0
宏是纯替换不涉及实参形参传递问题,对于频繁调用的小型函数用宏比较有效率,
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lunarfan
简洁就是美
等级:
可用分等级:
中农
总技术分:
851
总技术分排名:
24488
发表于:
2008-08-08 09:57:39
5
楼 得分:
0
还有从时间上来说宏是在编译前也就是预处理时候展开替换,函数只有在调用他的时候分配内存执行的。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
k2eats
浩然正气 贵真求善
等级:
可用分等级:
富农
总技术分:
17277
总技术分排名:
829
发表于:
2008-08-08 10:12:03
6
楼 得分:
10
宏在编译阶段直接展开替代,一般适应于小型的函数,提高效率
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dongw1023
蓝色星空
等级:
可用分等级:
贫农
总技术分:
72
总技术分排名:
106397
发表于:
2008-08-08 10:15:21
7
楼 得分:
0
引用 1 楼 dding_inshili 的回复:
宏和函数有着本质的区别:
1,函数是在运行是分配临时内存空间的, 而宏是在编译阶段展开的,另外, 在展开的时候并不分配内存空间,也不进行值的传递, 更是没有什么返回值。
2,函数调用是先求出实参表达式,然后带入形参; 而宏只是进行简单的字符串替代。
3,函数的形参的参数类型有着严格的规定, 而宏中的参数是不严格的。
4,函数的调用过程要占用一系列处理时间,而宏的展开只占用编译时间,不占用运行时间。
…
在程序中调用时,宏是简单的代码替换
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
realdragon2
大宝
等级:
可用分等级:
中农
总技术分:
707
总技术分排名:
29450
发表于:
2008-08-08 10:23:17
8
楼 得分:
0
补充:
宏分两种,一种是带参数的,一种是不带参数的. 只有带参数的宏才有必要和函数进行比较.
带参数的宏的参数不是变量,而函数的参数(不管是本身的形参还是传递给它的实参)是变量.
另外, 在调用的时候(形式上和函数的调用类似),如果传递给它的是一表达式, 则表达式不进行运算,而直接代入对应的字符, 所以在定义有参数宏的时候一定要记着用括号括起每个字符来.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
eatsweetpotato
eat.sweet.potato
等级:
可用分等级:
中农
总技术分:
159
总技术分排名:
68863
发表于:
2008-08-08 10:28:36
9
楼 得分:
0
宏与类型无关,还有宏中的参数不能有副作用
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
xianyuxiaoqiang
想翻身的咸鱼
等级:
可用分等级:
贫农
总技术分:
391
总技术分排名:
43634
发表于:
2008-08-08 10:35:52
10
楼 得分:
0
宏就是让编译器去玩文字游戏。比如
C/C++ code
#define
a(b) b+b
void
main(){ .... a(x
*
y);
//
编译器会把它变成 x*y+x*y
.... }
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
csgdseed
该用户很懒,没有设置昵称
等级:
可用分等级:
中农
总技术分:
705
总技术分排名:
26217
发表于:
2008-08-08 11:34:40
11
楼 得分:
0
书上都有
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
pigHead_chen
人一定要靠自己
等级:
可用分等级:
贫农
总技术分:
237
总技术分排名:
53713
发表于:
2008-08-08 11:47:13
12
楼 得分:
0
引用 1 楼 dding_inshili 的回复:
宏和函数有着本质的区别:
1,函数是在运行是分配临时内存空间的, 而宏是在编译阶段展开的,另外, 在展开的时候并不分配内存空间,也不进行值的传递, 更是没有什么返回值。
2,函数调用是先求出实参表达式,然后带入形参; 而宏只是进行简单的字符串替代。
3,函数的形参的参数类型有着严格的规定, 而宏中的参数是不严格的。
4,函数的调用过程要占用一系列处理时间,而宏的展开只占用编译时间,不占用运行时间。
…
你问宏和内联函数的区别会更有意义些。一楼回答很全面。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ya6100479
该用户很懒,没有设置昵称
等级:
可用分等级:
短工
总技术分:
0
总技术分排名:
313963
发表于:
2008-08-18 20:28:20
13
楼 得分:
0
引用楼主 Jerrylearnc 的帖子:
最近遇到两个概念
宏和函数
这两个有什么区别呢?
还有就是固有函数生成内嵌代码运行库程序 是什么意思
这是在单片机里看到的
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友