【编程技巧】如何使用带参数的宏 && 常用的带参数宏

前提是你 提交于 2020-01-16 11:44:42

本文使用C/C++语言进行编程(点进来都是C/C++的盆友吧 =w=)

 

0x00 什么是宏定义

如果还不知道宏定义的童鞋就查一下吧……点进来的应该都是学过的吧……

0x01 带参数的宏是个什么鬼?喵喵喵?

带参数的宏不是鬼,也不是一只猫。 其实顾名思义,就是宏里有参数——没学过参数的童鞋也学一下函数吧。

 

下面本文正式开始:

 

0x02 如何使用带参数的宏

先举个栗子:

1 #define random(a, b) rand() % b + a

这是一个生成随机数的宏定义,比如说想生成 1-10000之间的随机数,就可以使用random(1, 10000)来生成。(注意:请使用srand来初始化随机数种子)

如果频繁使用随机数的话,这个宏比较有用。其特点为可以在不影响代码可读性的前提上令代码更简洁,我不知道从事IT者会不会这么用,但OIer一般会这么用。

 

好了,扯了那么久的淡,现在来谈谈具体的语法吧!具体语法:

#define 宏名称(参数表) 宏体

这个可以根据上面的栗子多理解理解,还要去多实践实践,相信很快就会明白哒~

0x03 常用的带参数宏(循环)

当我们需要大量写循环的时候, 可以用宏来减少代码量,又不失代码可读性。通常这两个宏是比较常用的:

FOR宏(一般用于i从0开始的情况)

#define FOR(i, a, b) for (int i = a;i < b;i++)

REP宏(一般用于i从1开始的情况)

#define REP(i, a, b) for (int i = a;i <= b;i++)

 

 

注:大写的原因是防止重名,为了避免重名,有时甚至所有宏都大写, 譬如REP宏。

 

The End

思考题1:为什么FOR宏一般是用于i从0开始的情况的?

思考题2:为什么REP宏一般是用于i从1开始的情况的?

*附加题:为什么这两个宏的参数表里面要有i这个参数?难道不能直接在宏体那里写int i吗?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!