欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-21 16:33:36
本文使用C/C++语言进行编程(点进来都是C/C++的盆友吧 =w=) 0x00 什么是宏定义 如果还不知道宏定义的童鞋就查一下吧……点进来的应该都是学过的吧…… 0x01 带参数的宏是个什么鬼?喵喵喵? 带参数的宏不是鬼,也不是一只猫。 其实顾名思义,就是宏里有参数——没学过参数的童鞋也学一下函数 ......

本文使用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吗?