經常遇到c/c++巨集定義中的#,#的用法分為兩種:#和##
#表示將巨集定義中的引數變成字串
##表示將巨集定義中的引數變成字串連在一起
例子:
#include #define str(a) #a
#define func(a, b) a##b
int main()
輸出:
ahello
解釋:#a 將a轉為了字串,所以輸出的不是1,而是a
a##b將輸入的引數a b連線為字串ab,而變數ab為字串型別,值為hello,所以輸出的是hello
需要注意的是有#或者##的地方,不會將引數展開了
例如:
#include #define pi 3.14
#define str(a) #a
#define f(t,f) t##f
int main()
輸出:
pi56
3.14
解釋:沒有將pi解釋,直接將pi轉為字串了
56輸出正常與下面的輸出對比,p和i沒有轉義,而是直接輸出pi,因為pi為3.14,所以輸出的是3.14
解決方法:加一層中間轉換層
#include #define pi 3.14
#define _str(a) #a
#define str(a) _str(a)
#define _f(t,f) t##f
#define f(t,f) _f(t,f)
int main()
輸出:
3.14
563.14
C C 語言中Static的作用詳述
在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...
C C 語言中Static的作用詳述
在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...
static關鍵字(C C 語言中的作用)
類中靜態成員注意事項 1 類中靜態成員分為 靜態資料成員 和 靜態成員函式。2 靜態資料成員與全域性物件的區別 1 static成員的名字是在類的作用域中,可以避免命名衝突。2 static資料成員可以是私有成員,而全域性物件不可以。3 static成員遵循正常的訪問規則。4 類中static資料成...