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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JavaFx中文教程
下一篇:C语言自学完备手册(17)——函数(3)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月17日 19时07分16秒