字符串化运算符(#)
null
此运算符使相应的实际参数用双引号括起来。#运算符,通常称为 串 运算符,将其前面的参数转换为带引号的字符串。有关预处理器指令的更多信息,请参阅 这 例如:
- 下面的预处理器将行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
- 在这个程序中,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
申请: ##提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与##相邻,则该参数将被实际参数替换,删除##和周围的空白,并重新扫描结果。
本文由 希瓦尼·古泰尔 .如果你喜欢GeekSforgek并想投稿,你也可以使用“投稿”撰写文章。极客。组织或邮寄你的文章到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END