一、问题
有⼈认为,在C 语⾔中使⽤“#”运算符的就是预处理,是不是呢?“##”⼜是什么呢?
二、解答
在程序中,最为常⻅的是#define 宏定义指令,下⾯通过这个指令理解⼀下“#”的作⽤。编写⼀个预处理指令,代码如下。
#define S(x) printf("x的平⽅为%d\n",(x) * (x))
main()
{S(4);
}
看到这个程序,很容易理解程序运⾏结果是什么。程序的运⾏结果如下所示。
x的平方为16
那么,怎样才能使输出时的字符 x 被当做需要替换的符号呢?希望能够在输出的字符串中包含宏参数,如下代码就可以满⾜这个要求。
#define S(x) printf("#x的平⽅为%d\n",(x) * (x))
main()
{S(4);
}
程序运⾏结果如下所示。
4的平方为16
结果是令⼈满意的,那么“#”运算符在预处理指令中的作⽤也就清晰可见了。它的功能是可以把语⾔符号转化为字符串。
“##”运算符与“#”运算符⼀样,可以⽤于宏函数的替换部分。这个运算符还可以起到粘合剂的作⽤,即将两个语⾔符号组合成单个语⾔符号。例如:
#define X(n) n##n
main()
{printf("%d\n", X(3));
}
可以得到 n 被宏函数替换成3,并且粘合到⼀起,得到33。程序运⾏结果如图下所示。
33
三、总结
C语 ⾔博⼤精深,⼩⼩的运算符“#”和“##”就有如此⼤的功能,但是它们的功能却很少有⼈了解。