c中关于#与##的简易使用

#运算符用于在预编译时,将宏参数转换为字符串

eg.

#include <stdio.h>
#define CONVERT(f)(#f)

void helloworld()
{
printf("hi,tom welcome to you!");
}

int main()
{
printf("%s\n",CONVERT(hello world!));
printf("%s\n",CONVERT(100));
printf("%s\n",CONVERT(while));
printf("%s\n",CONVERT(return));
printf("%s\n",CONVERT(helloworld));
return 0;
}

输出:

 

printf("%s\n",CONVERT(helloworld)); 这句并没有执行函数里面的内容,没有输出:printf("hi,tom welcome to you!");

CONVERT宏只是输出了函数的名称。

 

 

##运算符则用于在预编译时,粘连两个符号

一般情况下,我们是这么定义结构体的:

#include <stdio.h>

typedef struct _student
{
int id;
char* name;
}student;

int main()
{
student s1;
s1.id=1;
s1.name="tth";
printf("id:%d\n",s1.id);
printf("name:%s\n",s1.name);

student *p1;
p1=&s1;
printf("p1-id:%d\n",p1->id);
printf("p1-name:%s\n",p1->name);

return 0;
}

当有了##运算符符后,我们可以这么定义结构体:

#include <stdio.h>
#define STUDENT(type)typedef struct _##type type;\
struct _##type
STUDENT(student)
{
int id;
char *name;
};


int main()
{
student s1;
s1.id=1;
s1.name="tth";

printf("id:%d",s1.id);
printf("name:%s",s1.name);
return 0;
}

输出:

posted @ 2015-01-12 12:00  ltlly  阅读(180)  评论(0编辑  收藏  举报