3.5、#和##运算符使用分析

来源:互联网 发布:手机加油软件 编辑:程序博客网 时间:2024/06/04 23:21
1、#运算符用于在预编译期将宏参数转换为字符串
              #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;
                }

2、##运算符用于在预编译期粘连两个符号
#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));
    printf("%d\n", NAME(2));

    return 0;
}



3、利用##定义结构体类型

#include <stdio.h>

#define STRUCT(type) typedef struct _tag_##type type;\
struct _tag_##type

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;
}


0 0