#和##在C语言中宏定义使用很多,简单写下#和##的用法
“#”运算符
运算符#的名字是Stringizing Operator
,它将函数宏的实际参数转换为对应的字符串常量。
-
”#“的功能是对参数执行字符串化,如果没有特殊情况,这就意味着直接用""将参数包裹起来做替换。
-
如果实际参数中包含在字符串中使用时需要转义的字符(比如"和),那么这些字符就会被转义。
-
被字符串化的文本中的所有前导和尾随空白被忽略。文本中间的任何空格序列都将转换为单个空格。至于注释,因为注释往往在编译器处理源代码刚开始就被去除,远早于字符串化的发生,所以注释不可能包含在转换的结果中。
-
参数直接转换成字符串,参数中的宏不展开。
“##”运算符
##称之为标记粘贴运算符(Token-Pasting Operator),也可以叫做合并运算符(“merging” operator)。简单的说,“##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。
当宏展开时,位于##两边的标记合并成一个标识符,如果##两边的标识符时宏函数的参数时,用实际参数取代标识符后再合并。##两边的空格在合并时都会被删除,空格多少是无关紧要的。