📜  C中的#和##运算符

📅  最后修改于: 2021-05-25 21:07:41             🧑  作者: Mango

字符串运算符(#)

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

  1. 以下预处理程序将行换成printf(mkstr(geeksforgeeks));进入printf(“ geeksforgeeks”);
    // CPP program to illustrate (#) operator
    #include 
    #define mkstr(s) #s
    int main(void)
    {
        printf(mkstr(geeksforgeeks));
        return 0;
    }
    

    输出:

    geeksforgeeks
    
  2. 在此程序中,a的值将替换为宏。
    // CPP program to illustrate (#) operator
    #include 
    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 
    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 
    #define concat(a, b) a##b
    int main(void)
    {
        int xy = 30;
        printf("%d", concat(x, y));
        return 0;
    }
    

    输出:

    30
    

应用程序: ##提供了一种在宏扩展过程中连接实际参数的方法。如果替换文本中的参数与##相邻,则将参数替换为实际参数,并删除##和周围的空白,然后重新扫描结果。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。