字符串运算符(#)
此运算符使相应的实际参数用双引号引起来。 #运算符通常称为stringize运算符,它将前面的参数转换为带引号的字符串。有关预处理器指令的更多信息,请参阅此
例子 :
- 以下预处理程序将行换成printf(mkstr(geeksforgeeks));进入printf(“ geeksforgeeks”);
// CPP program to illustrate (#) operator #include
#define mkstr(s) #s int main(void) { printf(mkstr(geeksforgeeks)); return 0; } 输出:
geeksforgeeks
- 在此程序中,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
- 该程序使用宏从两个数字中找出最大值
// 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
令牌粘贴运算符(##)
允许将用作实际参数的标记串联起来以形成其他标记。在扩展宏时将两个令牌合并为一个通常很有用。这称为令牌粘贴或令牌串联。 “ ##”预处理运算符执行令牌粘贴。扩展宏时,每个’##’运算符两侧的两个标记合并为一个标记,然后替换宏扩展中的’##’和两个原始标记。
例子 :
- 预处理程序转换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基础课程》。