C語言編譯器的預定義符號
__LINE__ 當前(源代碼文件)行號 [整數]
__FILE__ 當前正在編譯的文件的文件名 [字符串]
__DATE__ 當前日期,以“月月 日日 年年年年”的形式給出 [字符串]
__TIME__ 當前時間,以“HH:mm:ss”的格式給出 [字符串]
__STDC__ 如果編譯器符合ANSI C標準,該宏爲1,否則爲0
__STDC_HOSTED__ 如果實現了所有C標準庫,該宏爲1,否則爲0
__STDC_VERSION__ 被定義爲199901L(不同編譯器可能不一樣,比如我用的gcc裏就沒有這個預定義符號)
注:這些預定義符號的首尾爲兩個下劃線,如果是兩個單詞,中間以一個下劃線連接。
如果在源代碼中使用了這些符號,它們會在預處理時被轉換(使用gcc編譯器的 -E 選項可以看到替換後的值)
C標準裏還在每個函數內預定義了一個標誌符: __func__
它被定義爲 static const char __func__[]="function-name";
即不能在程序內對__func__賦值,也不能改變它所指向的字符串(函數名),否則報編譯錯誤
注:__func__是個標誌符,它在預處理階段不被替換,所以使用gcc -E 是看不到任何效果的。
例:test.c
int main(){
printf("%s %s/n",__FILE__,__func__);
return 0;
}
輸出: test.c main
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/flylonginsky/archive/2009/07/14/4346310.aspx