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++" 

 

你可能感兴趣的:(嵌入式)