社区
C语言
帖子详情
#define 一个函数的好处?
f15361110801
2012-02-02 11:45:42
用
#define func(x) ... // 对x进行处理
和
func(x) // 定义一个函数
有什么分别?
有什么优势与劣势?
谢谢~
...全文
792
16
打赏
收藏
#define 一个函数的好处?
用 #define func(x) ... // 对x进行处理 和 func(x) // 定义一个函数 有什么分别? 有什么优势与劣势? 谢谢~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
程序员小迷
2012-02-04
打赏
举报
回复
就是宏和函数的区别
Lactoferrin
2012-02-03
打赏
举报
回复
函数体很大时不要#define,否则空间时间都得不到
wopabe
2012-02-03
打赏
举报
回复
1
前者是宏,只会替代,是在预编译时执行的
而函数是在运行时执行的
所以前者运行比较快
zzzzyu
2012-02-03
打赏
举报
回复
[Quote=引用 2 楼 f15361110801 的回复:]
在学链表时,
书上定义
struct List{
int size;
......
};
struct List *list;
本该可以用
list->size
来读取信息;
为何书上还用
#define list_size(list) ((list)->size)
那么麻烦呢?
[/Quote]
list->size
这是一个对象的字段的读取
#define list_size(list)
写成一个宏 那就任何对象的传入都可以读同一字段
但是没有类型检查 存在隐患
赵4老师
2012-02-03
打赏
举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。
RLib
2012-02-03
打赏
举报
回复
#define这将强制编译器进行内联(不能保证~~),但重复代码可能会增加。
对此,Visual Studio 2011有一项 重复代码分析 功能,听说可以分析代码逻辑,找出重复的代码,方便重构代码。
sagegz
2012-02-02
打赏
举报
回复
2
优点:可完成函数调用的功能,又能减少系统开销,提高运行效率。因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。
缺点:所占用的目标代码空间相对较大
PS:牺牲空间来换取时间
jzxsasch
2012-02-02
打赏
举报
回复
#define func(x)是替换,它会产生很多问题
问题少点
f15361110801
2012-02-02
打赏
举报
回复
在学链表时,
书上定义
struct List{
int size;
......
};
struct List *list;
本该可以用
list->size
来读取信息;
为何书上还用
#define list_size(list) ((list)->size)
那么麻烦呢?
ProgrammingRing
2012-02-02
打赏
举报
回复
宏速度快~没有类型限制,缺点是不灵活,不知对否- -
欢乐的小熊
2012-02-02
打赏
举报
回复
优势:比函数调用效率高,省去了参数的拷贝,直接替换。
劣势:目标代码空间变大,不利于调试,还可能会导致隐含的错误,如:
#define fun(a) a+a
int a = 2;
fun(a++);
newpuple
2012-02-02
打赏
举报
回复
宏有很多好处,上面说了很多,基本上二楼都说出来了
我说个头疼的缺点,不利于调试,单步调试时根本看不出里面的变化
hu7324829
2012-02-02
打赏
举报
回复
宏 代码在预处理期被简单替换, 类似于C++的内联函数
普通函数 多了申请栈,压栈,出栈,释放栈
AnYidan
2012-02-02
打赏
举报
回复
[Quote=引用 4 楼 sagegz 的回复:]
优点:可完成函数调用的功能,又能减少系统开销,提高运行效率。因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。
缺点:所占用的目标代码空间相对较大
PS:牺牲空间来换取时间
[/Quote]
避过了类型,有点泛型的意思,但有副作用。。。
jixiang1983
2012-02-02
打赏
举报
回复
[Quote=引用 4 楼 sagegz 的回复:]
优点:可完成函数调用的功能,又能减少系统开销,提高运行效率。因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。
缺点:所占用的目标代码空间相对较大
PS:牺牲空间来换取时间
[/Quote]
楼上说的不错,宏定义牺牲空间换取时间,而且不灵活,不便修改,容易出错
#
define
中定义
函数
可以使用另
一个
#
define
定义的变量吗?
我们都知道#
define
可以在程序预编译期间对代码进行替换,前两天遇到了
一个
问题,问预定义的
函数
中是否可以使用预定义的变量,问题描述可能略微复杂,详细内容如下: #include <stdio.h> #
define
N 3 #
define
...
#
define
定义
函数
1.#
define
定义
函数
,
函数
不带参数 #include <stdio.h> #include <stdlib.h> #
define
RESULT (x*2+5) int main() { int x = 10; printf("RESULT是:%d\n",RESULT); return 0; } 2.#
define
定义...
#
define
的使用
在很多C程序中,我们会在
一个
源文件的开头看到#
define
的字眼,和
define
的英文解释相同——可以理解为给xxx下定义,这里可以是标识符甚至是
一个
函数
,接下来的内容将会对#
define
进行详解 1.#
define
定义标识符 使用...
#ifndef/#
define
/#endif使用详解
想必很多人都看过“头文件中的 #ifndef/#
define
/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用... 其实“被重复引用”是指
一个
头文件在同
一个
cpp文件中
#
define
用法详解 及#ifndef #
define
#endif 总结
想要知道三者的关系,不得不先说说#
define
宏定义。简单来说#
define
XX ??? 就是在源码编译之前,将代码中XX全部替换成???. #
define
用法一般分以下几种: 1、无参宏定义 形式为:#
define
宏名 字符串 ...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章