python展开 c函数中的宏预处理_C中的预处理宏

C中的预处理宏

宏定义就属于预处理命令的一种。那么,什么是宏呢?

宏:c语言标准允许在程序中用一个标识符来表示一个字符串。标识符就是宏名。

宏替换:宏替换就是宏定义。在编译预处理中,将程序中所有的宏名用相应的字符串来替换,这个过程称为宏替换。

宏分为两种:

1、无参数宏   #define 标识符 字符串

2、带参数宏   #define 标识符(形参表) 字符串

因为无参数宏比较简单,所以重点说一下带参数宏。

有参宏定义中#的用法

#define STR(str) #str

#用于把宏定义中的参数两端加上字符串的""

比如,这里STR(my#name)会被替换成"my#name"

一般由任意字符都可以做形参,但以下情况会出错:

STR())这样,编译器不会把“)”当成STR()的参数。

STR(,)同上,编译器不会把“,”当成STR的参数。

STR(A,B)如果实参过多,则编译器会把多余的参数舍去。

STR((A,B))会被解读为实参为:(A,B),而不是被解读为两个实参,第一个是(A第二个是B)。

一个预处理宏的例子:

# define PRINT(STR,VAR) cout<

跟在宏名后面的括号中的参数会被闭括号后面的所有代码替代。只要在调用宏的地方,预处理程序就删除名字PRINT并替换代码,所以使用宏名时编译器不会报告任何错误信息,它并不对参数做任何类型检查。

有参宏定义中##的用法

#define WIDE(str) L##str

则会将形参str的前面加上L

比如:WIDE("abc")就会被替换成L"abc"

如果有#define FUN(a,b) vo##a##b()

那么FUN(id ma,in)会被替换成void main()

另一个例子:

# define P(EX) cout<

其中的“#”被称为:字符串化的预处理特征,其作用是获得任何一个表达式并把它转换为一个字符数组。

多行宏定义:

#define doit(m,n) for(int i=0;i

{\

m+=i;\

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值