ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言宏定义中#、##、#@符号的使用

2022-05-12 18:33:57  阅读:144  来源: 互联网

标签:子串 符号 ## C语言 --- 123 test define


1、宏定义中#的使用
在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。
例:

#define  A(x)        #x
#define     B(x, y)    #x"."#y
即     A(123) ------>  "123"
    B(123, 456) ------>  "123"".""456"

    std::string str1 = A(test);     //即str1 = “test”;
    std::string str2 = B(abc, 123); //即str2 = "abc"".""456"  ---> 等价于 str2 = "abc.123";

2、宏定义中##连接符的使用
##连接符号其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串,即##将其紧邻的前后两个子串联接起来。所以##的前后各必须存在一个子串,即n个##连接符连接n+1个子串。

#define  A(x)        test_##x  //test_是第一个子串,x是第二个子串,##则将两个子串连接到一起
#define  B(x, y)    x##y  //x是第一个子串,y是第二个子串
#define  C(x, y)    test_##x##_##y //test_是第一个子串,x是第二个子串,_是第三个子串,y是第四个子串
#define  D(x, y, z)    x##y##z
即:
    A(1) --->  test_1
    B(abc, 123) --->  abc123
    C(abc, 123) --->  test_abc_123
    D(test, 1, 23) ---> test123

3、宏定义中#@符号使用
在C语言的宏中,#@的功能是将其后面的宏参数字符化,即在其左右各加上一个单引号。

#define  A(a)  #@a
即:
    A(!) --->  '!'

标签:子串,符号,##,C语言,---,123,test,define
来源: https://www.cnblogs.com/lidabo/p/16263631.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有