C语言:函数式宏中的#运算符
- 在函数式宏中,替换列表里标识符前的
#运算符,会让该标识符先经过参数替换,再被一对双引号包裹起来,最终形成一个字符串字面量。 - 此外,预处理器会自动添加反斜杠来转义内部的双引号,并将字符串中的反斜杠数量翻倍;同时,会移除字符串首尾的空白字符,并将中间的连续空白字符(非字符串字面量内部的)合并为单个空格。
- 这个过程被称为字符串化。
示例:
#include<stdio.h>#defineSTR(x)#xintmain(){printf("%s\n",STR(hello));printf("%s\n",STR(hello world));printf("%s\n",STR(hello world));printf("%s\n",STR(hello"Hugo"));return0;}运行结果:
