隨筆三個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;
}

 

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