吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → C 中的 # 和 ## 运算符

C 中的 # 和 ## 运算符

来源:网络 | 更新时间:2022-01-10 21:06:02

字符串化运算符 (#)

此运算符导致相应的实际参数用双引号引起来。# 运算符,通常称为stringize运算符,将它前面的参数转换为带引号的字符串。 示例:
  • 以下预处理器将行 printf(mkstr(52cxydh)); 进入 printf(“52cxydh”);
// CPP program to illustrate (#) operator
#include <stdio.h>
#define mkstr(s) #s
int main(void)
{
printf(mkstr(52cxydh));
return 0;
}
输出: 52cxydh
  • 在这个程序中,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
  • 该程序使用宏找出两个数字中的最大值
// 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

标记粘贴运算符 (##)

允许将用作实际参数的标记连接起来形成其他标记。在扩展宏时将两个标记合并为一个通常很有用。这称为令牌粘贴或令牌连接。'##' 预处理运算符执行令牌粘贴。扩展宏时,每个“##”运算符两侧的两个标记组合成一个标记,然后替换宏扩展中的“##”和两个原始标记。 例子 :
  • 预处理器转换 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
应用: ## 提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与## 相邻,则将参数替换为实际参数,删除## 和周围的空白,并重新扫描结果。  

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com