随笔三个C语言例子

 

在一些项目中,我们会经常看到 某个宏定义中 有 "#XXX"的写法,或者 x##y的写法。

也就是说,# 和 ## 在宏定义中的作用是什么?

通过如下三个例子简单理解下:

# 解决了双引号中无法 替换的问题

#include <stdio.h>
//#define str(x) #x
#define str(x) "bbbbbbbbbbbb "#x" aaaaaaaaaaaa"

int main()
{
    printf("%s\n", str(100));   //bbbbbbbbbbbb 100 aaaaaaaaaaaa
    return 0;
}

## 解决了非双引号中粘连无法替换的问题

#include <stdio.h>

#define test(a) (a##a)
#define sum(a,b) (a##a+b##b)

int main()
{
    printf("%d\n", sum(2, 3));  //55
    printf("%d\n", test(2));    //22
    return 0;
}

 通过## 隐藏变量 的 声明和使用

#include <stdio.h>

#define XNAME(N) x##N

#define PRINT_XN(n) printf("x"#n" = %d\n", x##n)
int main()
{
    int XNAME(1) = 14;  // x1变量赋值为 14
    int XNAME(2) = 20;  // x2变量赋值为 20

    printf("x1 = %d, x2 = %d\n", x1, x2);
    PRINT_XN(1);
    PRINT_XN(2);

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章