#C中的##运算符

字符串化运算符(#)

null

此运算符使相应的实际参数用双引号括起来。#运算符,通常称为 运算符,将其前面的参数转换为带引号的字符串。有关预处理器指令的更多信息,请参阅 例如:

  1. 下面的预处理器将行printf(mkstr(geeksforgeks));进入printf(“Geeksforgeks”);

    // CPP program to illustrate (#) operator
    #include <stdio.h>
    #define mkstr(s) #s
    int main( void )
    {
    printf (mkstr(geeksforgeeks));
    return 0;
    }

    
    

    输出:

    geeksforgeeks
    
  2. 在这个程序中,a的值被宏替换。

    // CPP program to illustrate (#) operator
    #include <iostream>
    using namespace std;
    #define a 8.3297
    int main()
    {
    cout << "Value of a is " << a << endl;
    return 0;
    }

    
    

    输出:

    Value of a is 8.3297
    
  3. 该程序使用宏从两个数字中找出最大值

    // CPP program to illustrate (#) operator
    #include <iostream>
    using namespace std;
    #define MAX(i, j) (((i) > (j)) ? i : j)
    int main()
    {
    int a, b;
    a = 250;
    b = 25;
    cout << "The maximum is " << MAX(a, b) << endl;
    return 0;
    }

    
    

    输出:

    The maximum is 250
    

令牌粘贴运算符(##)

允许将用作实际参数的标记连接起来以形成其他标记。在扩展宏时,将两个标记合并为一个标记通常很有用。这称为标记粘贴或标记连接。“##”预处理操作符执行令牌粘贴。展开宏时,每个“##”运算符两侧的两个标记组合成一个标记,然后替换宏展开中的“##”和两个原始标记。 例如:

  1. 预处理器转换printf(“%d”,concat(x,y));转换成printf(“%d”,xy);

    // CPP program to illustrate (##) operator
    #include <stdio.h>
    #define concat(a, b) a##b
    int main( void )
    {
    int xy = 30;
    printf ( "%d" , concat(x, y));
    return 0;
    }

    
    

    输出:

    30
    

申请: ##提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与##相邻,则该参数将被实际参数替换,删除##和周围的空白,并重新扫描结果。

本文由 希瓦尼·古泰尔 .如果你喜欢GeekSforgek并想投稿,你也可以使用“投稿”撰写文章。极客。组织或邮寄你的文章到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享