C语言中#、##宏定义的用法

一、#的用法

#用于编译器编译过程进行预处理。

1、宏定义
#define ON  1

#ifndef _PARA_
#define _PARA_
#enddef

#ifdef _PARB_
#define DEFAULT_SIZE 1024
#enddef

2、宏开关
#if VAR
...
#elif
...
#end

3、显示设定错误
#error ERROR: Not Define

4、设置字节对齐
#pragma pack(1)

#还可以用于宏定义时转变参数为字符串,需要注意#无法再次展开,宏定义替换的时候遇到#就停止向下进一步展开,但是可以通过中间再写一个转换宏,进行替换。


e.g.1: 
#define STR(str)      #str 
char *mystr = STR(test);
printf("%s",mystr);
result: "test" 

e.g.2: 
#define STR(str)      #str 
char *myits =STR(1024);
printf("%s",myits);
result: "1024" 

e.g.3: 
#define STR(str)       #str
#define SIZE           1024
char *myint =STR(SIZE);
printf("%s",myint);
result: "SIZE" //此处输出式SIZE 因为SIZE是一个宏,不会再展开

e.g.4: 
#define _STR(str)      #str
#define STR(str)       _STR(str)
#define SIZE           1024
char *myint =STR(SIZE);
printf("%s",myint);
result: "1024" //增加了中间层,可以正确转换

二、##的用法

##用于宏定义时将两个内容进行拼接。


e.g.1: 
#define LINK2(a,b)      a##b 
char *mystr = LINK2(o,k);
printf("%s",mystr);
result: "ok" 

e.g.2: 
#define LINK3(a,b,c)      a##b##c 
char *mystr = LINK3(c,+,+);
printf("%s",mystr);
result: "c++" 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值