background image

 

相当于:
MSG _msg[] = {{OPEN, "OPEN"}, 
              {CLOSE, "CLOSE"}}; 

3

 

、记录文件名

#define  _GET_FILE_NAME(f)   #f 
#define  GET_FILE_NAME(f)    _GET_FILE_NAME(f) 
static char  FILE_NAME[] = GET_FILE_NAME(__FILE__); 

4

 

、得到一个数值类型所对应的字符串缓冲大小

#define  _TYPE_BUF_SIZE(type)  sizeof #type 
#define  TYPE_BUF_SIZE(type)   _TYPE_BUF_SIZE(type) 
char  buf[TYPE_BUF_SIZE(INT_MAX)]; 
     -->  char  buf[_TYPE_BUF_SIZE(0x7fffffff)]; 
     -->  char  buf[sizeof "0x7fffffff"]; 

 

这里相当于:
char  buf[11];

【alps_008】:
基本看了一遍,楼主的情况属于一般用法:

“#把宏参数变为一个字符串,用##

把两个宏参数贴合在一起

#include<stdio.h>
#include<string.h>
#define STRCPY(a,b) strcpy(a##_p,#b)   //把第一个参数后边加上字符_p,把第二个参数变
成字符串

int main()
{
char var1_p[20];
char var2_p[30];
strcpy(var1_p,"aaaa");
strcpy(var2_p,"bbbb");
         STRCPY(var1,var2);            //等于 strcpy(var1_p,"var2");
STRCPY(var2,var1);            //等于 strcpy(var2_p,"var1");
printf("%s\n",var1_p);
printf("%s\n",var2_p);
return 0;
}