C++宏定义中\、##、##、#@的作用

本文详细介绍了C语言中预处理指令的基本用法,包括行继续操作、预处理作用、字符串化作用、连接操作符号及字符化操作符的功能,并通过具体示例展示了这些指令的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.\行继续操作

\ 行继续操作当定义的宏不能用一行表达完整时,可以用\(反斜线)表示下一行继续此宏的定义。

例:

#define REFLECTION_TYPE(class_name) \
    namespace Reflection \
    { \
        namespace TypeFieldReflectionOparator \
        { \
            class Type##class_name##Operator; \
        } \
    };

2.#的预处理作用

 #开头的语句常常是预处理命令,如#define、#if、#else、#end等等,用来在代码编译时进行一些操作。

3.#的字符串化作用

 符号 # 也称为字符串化运算符(stringify operator 或 stringizing operator),它会把宏调用时的实参(调用时传递给函数的参数叫做实际参数)转换为字符串。

例:

#include "stdio.h"

using namespace std;

#define print(n) printf("print:"#n"")//把实参n转换为了字符串

int main()
{

	print(5);
	return 0;
}

输出为:

print:5

4.##连接操作符号

符号 ## 则是连接符号,其功能是把两边的字符串连接起来形成一个变量名。

例:

#include "stdio.h"

using namespace std;

#define print(n) printf("%d",num_##n)//把实参n转化为字符串后与num_相连,形成num_n变量名

int main()
{
	int num_5 = 54645;
	print(5);//num_##n在编译时被替换为num_5,所以被打印的是num_5的值
	return 0;
}

输出为:

54645

5.#@字符化操作符

#@只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。作用是将传的单字符参数名转换成字符,以一对单引用括起来其实就是给x加上单引号,结果类型为const char

#include<stdio.h>
using namespace std;

#define print(arg) printf("%c",#@arg)//把arg转化为了单字符
int main()
{
	print(1);
}

输出为

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值