- 論壇徽章:
- 0
|
完全可以谷歌
預定義宏
標準C中定義了一些對象宏, 這些宏的名稱以"__"開頭和結尾, 并且都是大寫字符. 這些預定義宏可以被#undef, 也可以被重定義.
下面列出一些標準C中常見的預定義對象宏(其中也包含gcc自己定義的一些預定義宏:
__LINE__ 當前語句所在的行號, 以10進制整數標注.
__FILE__ 當前源文件的文件名, 以字符串常量標注.
__DATE__ 程序被編譯的日期, 以"Mmm dd yyyy"格式的字符串標注.
__TIME__ 程序被編譯的時間, 以"hh:mm:ss"格式的字符串標注, 該時間由asctime返回.
__STDC__ 如果當前編譯器符合ISO標準, 那么該宏的值為1
__STDC_VERSION__ 如果當前編譯器符合C89, 那么它被定義為199409L, 如果符合C99, 那么被定義為199901L.
我用gcc, 如果不指定-std=c99, 其他情況都給出__STDC_VERSION__未定義的錯誤信息, 咋回事呢?
__STDC_HOSTED__ 如果當前系統(tǒng)是"本地系統(tǒng)(hosted)", 那么它被定義為1. 本地系統(tǒng)表示當前系統(tǒng)擁有完整的標準C庫.
gcc定義的預定義宏:
__OPTMIZE__ 如果編譯過程中使用了優(yōu)化, 那么該宏被定義為1.
__OPTMIZE_SIZE__ 同上, 但僅在優(yōu)化是針對代碼大小而非速度時才被定義為1.
__VERSION__ 顯示所用gcc的版本號.
可參考"GCC the complete reference".
要想看到gcc所定義的所有預定義宏, 可以運行: $ cpp -dM /dev/null #line用來修改__LINE__和__FILE__.
e.g.
printf("line: %d, file: %s\n", __LINE__, __FILE__);
#line 100 "haha"
printf("line: %d, file: %s\n", __LINE__, __FILE__);
printf("line: %d, file: %s\n", __LINE__, __FILE__);
顯示:
line: 34, file: 1.c
line: 100, file: haha
line: 101, file: haha |
|