本文使用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吗?
来源:https://www.cnblogs.com/OIer-Dennis/p/12200182.html