1、#是用來把變數名轉換為字串的,例如:
#define print(val) printf(#val"=%d\n", val)
int main()
通過預編譯:gcc -e test.c -o test.i
得到結果:
int main()
其作用相當於為輸入值新增了一對雙引號。
2、##用於連線字元,例如
#define name(no) name_##no
int main()
通過預編譯:gcc -e test.c -o test.i
得到結果:
int main()
需要注意的有兩點:
(1)此處的no不能為加引號的字串,否則會提示無效的預處理符號。
(2)而是存在巨集巢狀的情況,如下:
#define one 1
#define two 2
#define name(no) name_##no
int main()
對應預處理結果:
int main()
並不符合預期,處理方法是加一層巨集定義:
#define one 1
#define two 2
#define _name(no) name_##no
#define name(no) _name(no)
int main()
結果如下:
int main()
符合預期。 c 巨集定義用法 define
巨集定義語法 define name stuff define pi 3.14 定義乙個m,值為3.14 define do forever for 定義乙個死迴圈 define reg register 定義reg來作為register的別名 define case break case 在swi...
巨集定義 和 用法總結
今天學socket發現 usr include bits sockaddr.h 檔案35行有這麼一句話 1 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 二 當巨集引數是另乙個巨集的時候 需要注意的是凡巨集定義裡有用 或 的地方巨集引數是不會再展開.1,非 和 的情...
c語言解除巨集定義 C語言中巨集定義的用法
說到巨集定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們程式設計時,程式的開頭 include指令,define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此c語言中是允許使用者自己加入一些特定的預處理指令的。一,不帶引數的巨集定義 不帶引數的巨集定義是比較簡單的,就是...