• #与##操作符使用


    #运算符

    • #运算符用于在预处理期将宏参数转换为字符串
    • #的转换作用是在预处理期完成的,因此只在宏定义中有效
    • 编译器不知道#的转换作用

    例子1:#运算符的基本用法

    #include<stdio.h>
    #define STRING(x) #x
    
    int main()
    {
    	printf("%s
    ",STRING(Hello World));
    	printf("%s
    ",STRING(100));
    	printf("%s
    ",STRING(while));
    	printf("%s
    ",STRING(return));
    
    	return 0;
    }
    

    例子2:运算符的妙用

    #include<stdio.h>
    #define CALL(f,p) (printf("Call function %s
    ",#f),f(p))
    
    int square(int n)
    {
        return n*n;
    }
    
    int func(int x)
    {
        return x;
    }
    
    int main()
    {
        int result = 0;
        result = CALL(square,4);
        printf("result = %d
    ",result);
        result = CALL(func,10);
        printf("result = %d
    ",result);
        return 0;
    }
    
    

    ##运算符

    • ##运算符用于在预处理期粘连两个标识符
    • ##的连接作用是在预处理期完成的,因此只在宏定义中有效
    • 编译器不知道##的连接作用

    例子3:##运算符的基本用法

    #include<stdio.h>
    #define NAME(n) name##n
    
    int main()
    {
    	int NAME(1);
    	int NAME(2);
    	
    	NAME(1);
    	NAME(2);
    
    	printf("%d
    ",NAME(1));
    	printf("%d
    ",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("s1.name = %s
    ",s1.name);
        printf("s1.id = %d
    ",s1.id);
        printf("s2.name = %s
    ",s2.name);
        printf("s2.id = %d
    ",s2.id);
        return 0;
    }
    
    

    小结

    • #运算符用于在预处理期将宏参数转换为字符串
    • ##运算符用于在预处理期粘连两个标识符
    • 编译器不知道#和##运算符符的存在
    • #和##运算符只在宏定义中有效
  • 相关阅读:
    C++虚函数表理解
    【转】c++虚函数实现原理
    【转】运输层TCP协议详细介绍
    【转】计算机中浮点数的表示
    ARP跨网段广播
    【转】arm和x86的区别
    面向对象六大原则
    安卓 热修复的原理
    Zygote和System进程的启动过程
    Android内存泄漏
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213149.html
Copyright © 2020-2023  润新知