1
、巨集定義中使用#
符號,巨集定義中使用#
代表把引數變成乙個字串,巨集定義中使用##
代表把兩個巨集引數連線在一起。
具體用法:
#include
#definestr(s) #s
#definecons(a, b) a##e##b
voidmain()
2、當巨集引數是另乙個巨集的時候,需要注意,凡是巨集定義裡面用到#
或者##
的地方,巨集引數不會再展開。
#include
#defineint_max 100
#definestr(s) #s
#definea (2)
#definecons(a, b) a##e##b
voidmain()
解決這個問題的方法很簡單,中間加上一層轉換即可。
#define_str(s) str(s)
printf(「%d」,_str(int_max)); => printf(「%d」, str(100));
#define_cons(a, b) cons(a, b)
printf(「%d」,_cons(a, a)); => printf(「%d」, cons((2), (2))); 3
、#和##
的特殊應用
#define_a1(type, var, line) type var##line
#define_a0(type, line) _a1(type, _anonymous,line)
#definea(type) _a0(type, __line__)
a(staticint) => _a0(static int, _anonymous, __line__) => _a1(staticint, _anonymous,70) => static int _anonymous70 c
語言中的
__line__
用以指示本行語句在原始檔中的位置資訊,舉例如下:
#include
main()
;
該程式在
linux
用gcc
編譯,在
windows
的vc6.0
下編譯都可以通過,執行結果都為:
7
8
9
還可以通過語句
#line
來重新設定
__line__
的值,舉例如下:
#include
#line200
main()
;
編譯執行後輸出結果為:
202
203
204
c
語言中的
__file__
用以指示本行語句所在原始檔的檔名,舉例如下(
test.c):
#include
intmain()
在gcc
編譯生成
a.out
,執行後輸出結果為:
test.c
在
windows
的vc6.0
下編譯執行結果為:
c:\documentsand settings\administrator\
桌面\test.c
另外
gcc還支援
__func__,
它指示所在的函式,但是這個關鍵字不被
windows
下的vc6.0支援.
#include
voidmain()
其編譯後輸出結果為
thisis print by function main
#definefill(a)
enumidd;
typedefstruct msg
msg;
msg_msg = ;
c語言中 作用
和 操作符是和 define巨集使用的.使用 使在 後的首個引數返回為乙個帶引號的字串.例如,命令 define to string s s 將會使編譯器把以下命令 cout to string hello world endl 理解為 cout hello world endl 使用 鏈結 前後的...
C語言中extern的作用
extern可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 extern char a 請問,這樣可以嗎?答案與分析 1 不可以,程式執行時會告訴你...
C語言中static的作用
在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 第乙個作用 隱藏。當我們同時編譯多個檔案時,所有未加static字首的 全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。下面是a.c的內容 i...