-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一:
# 运算符
# 运算符用于在预编译期将宏参数转换为字符串
#include <stdio.h>
#define CONVERS(x) #x
int main()
{
printf("%s\n", CONVERS(Hello world!));
printf("%s\n", CONVERS(100));
printf("%s\n", CONVERS(while));
printf("%s\n", CONVERS(return));
return 0;
}
第二:
# 运算符在宏中的妙用
#include <stdio.h>
//逗号表达式
//打印函数名: printf("Call function %s\n", #f)
//求平方值: f(p)
#define CALL(f, p) ( printf("Call function %s\n", #f) , f(p) )
int square(int n)
{
return n * n;
}
int f(int x)
{
return x;
}
int main()
{
printf("1. %d\n", CALL(square, 4));
printf("2. %d\n", CALL(f, 10));
return 0;
}
第三:
## 运算符
##运算符用于在预编译期粘连两个符号
#include <stdio.h>
#define NAME(n) name##n
int main()
{
int NAME(1);
int NAME(2);
NAME(1) = 1;
NAME(2) = 2;
printf("%d\n", NAME(1));//NAME(1) --> name##n = name1 = 1
printf("%d\n", NAME(2));//NAME(2) --> name##n = name2 = 2
return 0;
}
第四:
利用## 定义结构类型
#include <stdio.h>
#define STRUCT(type) typedef struct _tag_##type type;\
struct _tag_##type
/*
typedef struct _tag_Student Student;struct _tag_Student
{
char* name;
int id;
};
*/
STRUCT(Student)
{
char* name;
int id;
};
int main()
{
Student s1;
Student s2;
s1.name = "s1";
s1.id = 0;
s2.name = "s2";
s2.id = 1;
printf("%s\n", s1.name);
printf("%d\n", s1.id);
printf("%s\n", s2.name);
printf("%d\n", s2.id);
return 0;
}