主题六 函数(C语言核心)----35.函数VS宏
来源:互联网 发布:ubuntu pyqt4下载 编辑:程序博客网 时间:2024/06/05 18:24
#include <stdio.h>#define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0void reset(void* p, int len){ while( len > 0 ) { ((char*)p)[--len] = 0; }}int main(){ int array[] = {1, 2, 3, 4, 5}; int len = sizeof(array); reset(array, len); RESET(array, len); return 0;}
宏的优点和缺点
宏的效率比函数稍高,但是其副作用巨大,容易出错
#include <stdio.h>#define ADD(a, b) a + b#define MUL(a, b) a * b#define _MIN_(a, b) ((a) < (b) ? (a) : (b))int main(){ int i = 1; int j = 10; printf("%d\n", MUL(ADD(1, 2), ADD(3, 4))); printf("%d\n", _MIN_(i++, j)); return 0;}//output:11,2//gcc -E test.c -o test.i 1+2*3+4=11,((i++)<=(j)?(i++):(j))
函数优点和缺点
函数存在实参到形参的传递,因此无任何副作用,但是函数需要建立活动对象,效率受到影响
宏无可代替的优势
宏参数可以是任何C语言实体,宏编写的_MIN_参数类型可以是int,float等等,宏的参数可以是类型名
#define MALLOC(type,n) (type*)malloc(n*sizeof(type))#include <stdio.h>#include <malloc.h>#define MALLOC(type, n) (type*)malloc(n * sizeof(type))int main(){ int* p = MALLOC(int, 5); int i = 0; for(i=0; i<5; i++) { p[i] = i + 1; printf("%d\n", p[i]); } free(p); return 0;}
小结
宏和函数并不是竞争对手
宏能够接受任何类型的参数,效率高,但易出错
函数的参数必须是固定类型,效率低,不易出错
宏可以实现函数不能实现的功能
阅读全文
0 0
- 主题六 函数(C语言核心)----35.函数VS宏
- 主题六 函数(C语言核心)----33.初步认识函数
- 主题六 函数(C语言核心)----36.函数调用行为
- 主题六 函数(C语言核心)----37.函数递归详解
- 主题六 函数(C语言核心)----38.函数设计技巧
- 主题六 函数(C语言核心)----34.可变参数列表
- 专题六-函数(C语言的核心)
- C语言函数的核心
- C语言函数集(六)
- C语言回顾 六 函数
- 【C语言疯狂讲义】(六)C语言函数
- GNU C语言的 扩展(六)内建函数
- 黑马程序员-C语言基础六:函数
- C语言学习记录(七):C语言的核心——函数
- C++ string函数 VS C语言字符串函数
- C语言(函数)
- C语言深度解剖读书笔记(6.函数的核心)
- C语言深度解剖读书笔记(6.函数的核心)
- 前台向后台提交数据是乱码的处理
- 实现ArrayList
- 简述处理多表分页查询时死循环问题
- PC端页面如何调用QQ进行在线聊天?
- JTable动态显示隐藏列
- 主题六 函数(C语言核心)----35.函数VS宏
- Python实战:如何隐藏自己的爬虫身份
- 有导向的策略搜索
- 关于webpack登堂入室的必经之路(1)
- 如何屏蔽IDEA不合理的提示警告
- vs常用快捷键总结
- 指向函数的指针
- mkconfig脚本分析
- 二叉树祖先