0
点赞
收藏
分享

微信扫一扫

C语言预处理中#和##运算符是什么意思?

IT影子 2024-05-27 阅读 32

一、问题

        有⼈认为,在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语 ⾔博⼤精深,⼩⼩的运算符“#”和“##”就有如此⼤的功能,但是它们的功能却很少有⼈了解。

举报

相关推荐

0 条评论