C/C++基础:宏

简述

宏作为C/C++最有特色的语言性质之一,犹如魔法一般,合理的使用可以极大的提高开发效率。

宏(Macro) 是C/C++的一个预处理指令,本质上是编译开始前进行的简单文本替换,我们可以定义一组宏代码片段,在程序中多次使用, 从而减少开发时间和精力。甚至我们可以使用宏来实现一些奇怪的操作,例如在C语言中利用宏做到如同模版一样的泛型编程。

宏的简单使用

基础语法

宏的基础使用方式如下:

#define 标识符 替换列表

比如,我们可以定义一个简单的宏PII,将其替换为浮点型字面量3.14

#define PII 3.14

// 我们可以在代码里使用PII这个宏
int main(){
   
   
	std::cout << PII << std::endl;		// PII 被展开为 3.14
	return 0;
}

带参宏(宏函数)

我们同样可以定义一个宏函数,可以让我们像普通的函数一样来调用他,其写法和最普通的文本替换宏无太大区别,参数和函数一样用括号包裹,用逗号(,)分隔即可,如下我们编写一个宏实现乘法的功能。

#define mul(a, b) a*b

int main(){
   
   
	std::cout << mul(2, 3) << std::endl;	// mul(2, 3)展开为 2*3
	return 0;
}

宏参字符串化#

有些时候,我们希望我们往宏传递的参数可以以字符串的形式展开,这个时候我们可以替换列表里使用#来将参数转为字符串。你可能觉得有些抽象,我保证看完下面这个例子,你就会知道什么是宏参字符串化:

#define str1(x) #x
#define str2(x) x

int main() {
   
   
	const char* s1 = str1(hello);		// 本行代码展开为 const char* s1 = "hello"
	// const char* s2 = str2(hello);	// 错误的代码,本行代码展开为 const char* s2 = hello
	const char* s3 = str2("hello");		// 本行代码展开为 const char* s2 = "hello"
	return 0;
}

宏拼接##

我们经常会有这样的需求,我们需要定义很多操作类似的函数,仅仅函数的前缀名不同,比如你可能需要在某处声明一系列这样的函数:

void func_1(int a, int b);
void func_2(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值