【编程技巧】如何使用带参数的宏 && 常用的带参数宏
程序员文章站
2022-06-23 22:36:58
本文使用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吗?
上一篇: Django模板继承下的动态数据传递—上下文处理器
下一篇: Django框架(二):设计模型