25_#和##操作符使用分析

关键词:#运算符、 ##运算符

1. #运算符

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

#define STRING(x) #x

int main()
{
    printf("%s\n", STRING(HELLO WORLD!));
    
    return 0;
}

2. #运算符在工程中的运用

#include <stdio.h>

#define Call(f, p) (printf("Call function %s\n", #f), f(p))

int square(int n)
{
    return n * n;
}

int func(int i)
{
    return i;
}

int main()
{
    int result = 0;
    
    result = Call(square, 4);
    
    printf("result = %d\n", result);
    
    result = Call(func, 10);
    
    printf("result = %d\n", result);

    return 0;
}

输出结果:

Call function square
result = 16
Call function func
result = 10

3. ##运算符

  • ##运算符用于在预处理期粘连两个标识符
  • ##的连接作用是在预处理期完成的,因此只在宏定义中有效
  • 编译器不知道##的连接作用
  • 用法:
// ##运算符将a和b连接一起为 ab
#define CONNECT(a, b) a##b

4. 小结

  • #运算符用于在预处理期将宏参数转换为字符串
  • ##运算符用于在预处理期粘连两个标识符
  • 编译器不知道###运算符的存在
  • ###运算符只在宏定义中有效

声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容