C语言自学完备手册(18)——宏
发布日期:2021-06-30 11:19:40
浏览次数:2
分类:技术文章
本文共 1585 字,大约阅读时间需要 5 分钟。
版权声明
- 本文原创作者:
- 作者博客地址:
对象式宏
语法概述:
#define a b
作用:将a替换为b
示例如下:
#include#include #define NUMBER 5int main(){ int i; for(i=0;i
运行结果:
i=0i=1i=2i=3i=4Process returned 0 (0x0) execution time : 1.179 sPress any key to continue.
通过定义宏NUMBER,在程序编译执行时会将NUMBER替换成5。
注意:
- 宏名一般采用大写
- 定义宏的语句的末尾没有分号(;)
- 对象式宏不能用来替换字符串字面量和字符常量中的部分内容
- 对象式宏不能用来替换变量名等标识符中的部分内容
函数式宏
先来做个练习:利用函数求整数和小数的平方值
代码如下:
#include#include int sqr_int(int x){ return x*x;}double sqr_double(double y){ return y*y;}int main(){ int x; double y; x=sqr_int(5); y=sqr_double(1.3); printf("计算结果是:%d %f",x,y); return 0;}
在该示例中,写了两个函数来分别计算整数的平方和小数的平方。其实,它们的本质是相同的——把两个数相乘作为结果;差别就在于数据类型的不一样。此时,我们就可以用函数式宏来进行代码的优化,代码如下:
#include#include #define sqr(x) ((x)*(x))int main(){ int x; double y; x=sqr(5); y=sqr(1.3); printf("计算结果是:%d %f",x,y); return 0;}
在该示例中定义了一个函数式宏,即代码第4行:
#define sqr(x) ((x)*(x))
所以,代码中的sqr(x)均会替换成((x)*(x));例如:
sqr(5) 会被替换成((5)*(5)) sqr(1.3)会被替换成((1.3)*(1.3))函数式宏与逗号表达式
C语言中有一个较为特殊的运算符——逗号运算符(,)。
该运算符用于连接两部分,它的计算过程如下:先求表达式1,后求表达式2;最终结果是表达式2的值
例如:
(3+5,6+8) 先求3+5的值为8,再求6+8的值为14;最终的结果为14(a=2*5,a*4) 先求a=2*5得到a的值是10,再求a*4的值是40;最终的结果是40
逗号表达式小结:
- 逗号表达式按照从左至右的顺序计算
- 逗号表达式作的最终结果为最后一个表达式的计算值
- 逗号表达式在所有运算符中的优先级非常低
明白了逗号表达式再来看看函数式宏和逗号表达式的应用,代码如下:
#include#include #define puts_alert(str) (puts("提示信息:"),puts(str))int main(){ printf("请您输入一个整数:\n"); int number; scanf("%d",&number); if(number==0){ puts_alert("您输入的数字是0"); }else{ puts_alert("您输入的数字不是0"); } return 0;}
转载地址:https://it9527.blog.csdn.net/article/details/81084766 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月17日 19时07分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何获取system()函数的pid
2019-04-30
iconv 文件编码转换
2019-04-30
QLineEdit设置ip输入规则
2019-04-30
Linux串口编程
2019-04-30
交互设计专业书籍推荐(内有部分书籍电子版下载)
2019-04-30
strcasestr函数
2019-04-30
h264 ES流文件通过计算first_mb_in_slice区分帧边界
2019-04-30
设置系统时间
2019-04-30
C++模板学习和C++ 模板套模板
2019-04-30
合 JSONP 和 jQuery 快速构建强大的 mashup
2019-04-30
自制基于地图的 mashup
2019-04-30
成为优秀程序员的十个有效方法
2019-04-30
Oracle计算时间差函数
2019-04-30
Linux开机启动十步骤
2019-04-30
source insight 字体设置
2019-04-30
Live555中RTP包的打包与发送过程分析
2019-04-30
TCP和UDP 协议发送数据包的大小
2019-04-30
用vlc搭建简单流媒体服务器(UDP和TCP方式)
2019-04-30
RTSP流媒体数据传输的两种方式(TCP和UDP)
2019-04-30
Q_DECLARE_METATYPE与qRegisterMetaType学习
2019-04-30