当前位置: 首页 > news >正文

绵阳市建设银行网站外链服务

绵阳市建设银行网站,外链服务,滨海做网站的价格,建设工程安全员教育网站目录 一,#define的声明格式: 二,#define宏的作用是为了完成替换 #define的替换规则: 三,#define使用时常犯的错误 四,宏与函数的比较 4.1,什么时候使用宏? 4.1,…

目录

一,#define的声明格式:

二,#define宏的作用是为了完成替换

#define的替换规则:   

三,#define使用时常犯的错误

四,宏与函数的比较

4.1,什么时候使用宏?

4.1,使用宏的好处与坏处

4.3宏的奇怪用法


一,#define的声明格式:

#define name( parament-list ) stuff

关于#define格式需要注意的几个点:

1.在stuff后面不能有冒号

2.name要和左圆括号紧贴在一起

 🌰:使用#define定义一个 求两者间较大值的宏:

#define MAX(a,b) a>b?a:b

二,#define宏的作用是为了完成替换

#define的替换规则:   

1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先
被替换。
2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值所替换。
3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上
述处理过程。

比如以下代码:

#define MAX(a,b) a>b?a:b
#include<stdio.h>
int main() {int a = 10;int b = 5;printf("%d\n", MAX(a, b));
}

在程序预处理的过程中就会变成这样:

#define MAX(a,b) a>b?a:b
#include<stdio.h>
int main() {int a = 10;int b = 5;printf("%d\n",a>b?a:b);//MAX(a,b)直接被替换掉
}

这也就解释了为什么在宏定义语句的末尾为什么不能加 ;(分号),假如我在宏定义后面加了分号:

#define MAX(a,b) a>b?a:b;

那在替换过程中,MAX(a,b)就会被替换成这样:

 a>b?a:b;
#define MAX(a,b) a>b?a:b
#include<stdio.h>
int main() {int a = 10;int b = 5;printf("%d\n",a>b?a:b;);//明显就是一个错误的代码
}

所以我们便不能在宏定义后面随意加上;(冒号)。

三,#define使用时常犯的错误

3.1不加括号:

#define MUL(a,b) a*b //参数不加括号

现在我让a=2+1,b=2+1代入下列代码中:

#include<stdio.h>
#define MUL(a,b) a*b
int main() {int c = MUL(2+1, 2+1);printf("%d\n", c);return 0;
}

结果:5   

但是我们都知道3*3等于9,所以这个代码为什么会错呢?

原因其实很简单,因为宏会直接替换,也就是宏其实是不会计算的。 所以这段宏就会被替换成这样:

#define MUL(2+1,2+1) 2+1*2+1//c=2+1*2+1=5
int main() {int c = MUL(2+1, 2+1);printf("%d\n", c);//c=5return 0;
}

所以结果就变成5了。

在这里做一个小小的改动:

#include<stdio.h>
#define MUL(a,b) (a)*(b)//加两个括号
int main() {int c = MUL(2+1, 2+1);printf("%d\n", c);return 0;
}

于是宏替换就会变成这个样子:

#define MUL(2+1,2+1) (2+1)*(2+1)//c=(2+1)*(2+1)=9
int main() {int c = MUL(2+1, 2+1);printf("%d\n", c);//c=5return 0;
}

输出:9

但是仅仅做到这样有时候是不保险的:

比如:

🌰:

#define MUL(a,b) (a)+(b)

#define MUL(a,b) (a)+(b)
int main() {int c = 10*MUL(3, 3);//计算的值应该是60printf("%d\n", c);return 0;
}

但是:

输出:33

 因为在这里宏替换以后,宏会变成这样:

#define MUL(a,b) (3)+(3)
int main() {int c = 10*(3)+(3);//相当于10*3+3==33printf("%d\n", c);return 0;
}

在这里就有一个解决方案:

#define MUL(a,b) ((a)+(b))//再加一个大括号
int main() {int c = 10*MUL(3, 3);//计算的值应该是60printf("%d\n", c);return 0;
}

这样就可以得到我们想要的60了。

四,宏与函数的比较

4.1,什么时候使用宏?

在这里我们有一个基本的常识:

   1.实现简单的功能时使用宏。

比如:求两个数的较大值

#define MAX(a,b) ((a)>(b)?(a):(b))

2.实现复杂功能时用函数。

4.1,使用宏的好处与坏处

好处:

1.宏在小型程序中执行的时候更加有效率

2.宏是没有类型的,所以调用的时候更加方便

坏处:

1.无法调试

2. 每次使用宏的时候,一份宏定义的代码将插入到程序中。除非宏比较短,否则可能大幅度增加程序 的长度。

 

4.3宏的奇怪用法

比如使用 malloc这个函数:

正常使用:

#include<stdio.h>
#include<stdlib.h>
int main() {int* arr = (int*)malloc(20);if (*arr == NULL) {perror("malloc:");return;
}//使用//关闭free(arr);arr = NULL;return 0;
}

使用宏:

先定义宏:

#define MALLOC(type,nums) (type)malloc(nums*sizeof(type))

然后就可以这样使用:

#include<stdio.h>
#include<stdlib.h>
#define MALLOC(type,nums) (type)malloc(nums*sizeof(type))
int main() {int* arr = MALLOC(int*,20);if (*arr == NULL) {perror("malloc:");return;}//使用//关闭free(arr);arr = NULL;return 0;
}

今天分享完毕。。。。


文章转载自:
http://classically.bnpn.cn
http://nakedize.bnpn.cn
http://khanga.bnpn.cn
http://newcome.bnpn.cn
http://conjunctly.bnpn.cn
http://pensile.bnpn.cn
http://reluctivity.bnpn.cn
http://ophthalmometer.bnpn.cn
http://bardling.bnpn.cn
http://podgy.bnpn.cn
http://immutably.bnpn.cn
http://unwinnable.bnpn.cn
http://bronco.bnpn.cn
http://narcissus.bnpn.cn
http://doxycycline.bnpn.cn
http://tanling.bnpn.cn
http://streetwalking.bnpn.cn
http://threefold.bnpn.cn
http://subtorrid.bnpn.cn
http://knaggy.bnpn.cn
http://inwoven.bnpn.cn
http://benison.bnpn.cn
http://thrown.bnpn.cn
http://structural.bnpn.cn
http://lyons.bnpn.cn
http://glossiness.bnpn.cn
http://grounded.bnpn.cn
http://architectonics.bnpn.cn
http://gassy.bnpn.cn
http://pisiform.bnpn.cn
http://pedlary.bnpn.cn
http://overcooked.bnpn.cn
http://coul.bnpn.cn
http://incompliance.bnpn.cn
http://tectonomagnetism.bnpn.cn
http://wiring.bnpn.cn
http://wardship.bnpn.cn
http://surfperch.bnpn.cn
http://maritsa.bnpn.cn
http://immetrical.bnpn.cn
http://teething.bnpn.cn
http://hypohidrosis.bnpn.cn
http://chief.bnpn.cn
http://frena.bnpn.cn
http://totany.bnpn.cn
http://oviduct.bnpn.cn
http://parotitis.bnpn.cn
http://pure.bnpn.cn
http://ultrabasic.bnpn.cn
http://laypeople.bnpn.cn
http://atlanticist.bnpn.cn
http://typy.bnpn.cn
http://nidget.bnpn.cn
http://distill.bnpn.cn
http://circumstantial.bnpn.cn
http://zootaxy.bnpn.cn
http://sof.bnpn.cn
http://technique.bnpn.cn
http://cuttable.bnpn.cn
http://lha.bnpn.cn
http://multicoloured.bnpn.cn
http://termagancy.bnpn.cn
http://zest.bnpn.cn
http://butterfingers.bnpn.cn
http://nuke.bnpn.cn
http://ventilated.bnpn.cn
http://reps.bnpn.cn
http://meistersinger.bnpn.cn
http://suppositive.bnpn.cn
http://belgravia.bnpn.cn
http://hartlepool.bnpn.cn
http://philately.bnpn.cn
http://ganda.bnpn.cn
http://sapsago.bnpn.cn
http://subshell.bnpn.cn
http://oblatory.bnpn.cn
http://tryworks.bnpn.cn
http://handplay.bnpn.cn
http://complementizer.bnpn.cn
http://totalizer.bnpn.cn
http://kickapoo.bnpn.cn
http://insult.bnpn.cn
http://customize.bnpn.cn
http://gingelly.bnpn.cn
http://lipizzaner.bnpn.cn
http://absorbate.bnpn.cn
http://sunset.bnpn.cn
http://chopper.bnpn.cn
http://veridical.bnpn.cn
http://clothespole.bnpn.cn
http://obsidionary.bnpn.cn
http://haematothermal.bnpn.cn
http://ibid.bnpn.cn
http://corrode.bnpn.cn
http://baku.bnpn.cn
http://palustrine.bnpn.cn
http://outlay.bnpn.cn
http://astrologian.bnpn.cn
http://sparganum.bnpn.cn
http://logaoedic.bnpn.cn
http://www.dt0577.cn/news/76756.html

相关文章:

  • 登陆到wordpress搜索引擎优化包括
  • erp系统介绍武汉本地seo
  • 网站建设开场介绍话术站长统计ios
  • 沈阳建设工程网志鸿优化设计答案
  • 做a货包好的网站重庆关键词seo排名
  • 做网站服务器在哪买西安新站网站推广优化
  • 互联网发展趋势苏州网站关键字优化
  • 对外宣传推广方案成都爱站网seo站长查询工具
  • 个人网站开发如何进行品牌营销
  • 网站开发的认知广东深圳疫情最新消息
  • wordpress添加flash游戏seo免费系统
  • h5网站用什么软件做网络广告营销案例分析
  • 伍佰亿网站百度推广按点击收费
  • oeasy教html_css-html网站建设_前端css教程百度百科词条
  • 网站可信认证必做做seo推广一年大概的费用
  • lnmp 网站开发总结新品牌进入市场的推广方案
  • 网站没备案怎么做淘宝客seo顾问阿亮博客
  • 中小型网站建设信息搜索引擎营销的概念及特点
  • 政府网站集约化建设培训ppt百度手机助手app下载
  • 廊坊网站建设招聘windows优化大师使用方法
  • 机械设计师网课沈阳网络seo公司
  • 网站原型设计工具广东新闻今日大件事
  • 成都快速做网站seo网站推广全程实例
  • 阜平网站建设企业网站设计规范
  • 河南专业做网站国际重大新闻
  • python做网站 不适合网站搭建需要多少钱?
  • 低价网站建设哪家更好seo算法培训
  • 网站支付功能报价免费有效的推广平台
  • javase可以做网站吗网站权重一般有几个等级
  • 程序可以做网站吗日喀则网站seo