qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          UNIX標(biāo)準(zhǔn)化及實(shí)現(xiàn)之功能測(cè)試宏

          在頭文件中定義了很多POSIX.1和XSI的符號(hào)。但是除了POSIX.1和XSI的定義之外,大多數(shù)實(shí)現(xiàn)在這些頭文件中也加上了它們自己的定義。如果在編譯一個(gè)程序時(shí),希望它只使用POSIX定義而不使用任何實(shí)現(xiàn)自己定義的限制,那么就需要定義常量_POSIX_C_SOURCE。所有POSIX.1頭文件中都使用此常量。當(dāng)定義該常量時(shí),就能排除任何實(shí)現(xiàn)專有的定義。
            注:POSIX.1標(biāo)準(zhǔn)的以前版本都定義了_POSIX_SOURCE常量。在POSIX.1的2001版中,它被替換為_(kāi)POSIX_C_SOURCE。
            常量_POSIX_C_SOURCE及_XOPEN_SOURCE被稱為功能測(cè)試宏(feature test macro)。所有功能測(cè)試宏都以下劃線開(kāi)始。當(dāng)要使用它們時(shí),通常在cc命令行中以下列方式定義:
            cc -D_POSIX_C_SOURCE=200112 file.c
            這使得C程序包括任何頭文件之前,定義了功能測(cè)試宏。如果我們僅想使用POSIX.1定義,那么也可將源文件的第一行設(shè)置為:
            #define _POSIX_C_SOURCE 200112
            為使Single UNIX Specification v3的功能可由應(yīng)用程序使用,需將常量_XOPEN_SOURCE定義為600。
            Single UNIX Specification將c99實(shí)用程序定義為C編譯環(huán)境的接口。隨之,就可以用如下方式編譯文件:
            c99 -D_XOPEN_SOURCE=600 file.c -o file
            為了在gcc C編譯器中啟用1999 ISO C擴(kuò)展,可以使用-std = c99選項(xiàng),如下所示:
            gcc -D_XOPEN_SOURCE=600 -std=c99 file.c -o file
            另一個(gè)功能測(cè)試宏是:__STDC__,它由符合ISO C標(biāo)準(zhǔn)的C編譯器自動(dòng)定義。這樣就允許我們編寫ISO C編譯器和非ISO C編譯器都能編譯的程序。例如,為了利用ISO C原型功能(如果支持),一個(gè)頭文件可能包含:
          #ifdef __STDC__
          void *myfunc( const char *, int );
          #else
          void *myfunc();
          #endif
            雖然,當(dāng)今的大多數(shù)C編譯器都支持ISO C標(biāo)準(zhǔn),但在很多頭文件中仍舊使用__STDC__功能測(cè)試宏。

          posted on 2014-11-04 10:16 順其自然EVO 閱讀(258) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2014年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 隆尧县| 富平县| 蕉岭县| 濮阳市| 寿阳县| 米易县| 祁东县| 宁陕县| 会昌县| 陆丰市| 宿迁市| 五寨县| 榆中县| 兰州市| 那曲县| 桐柏县| 克东县| 师宗县| 运城市| 巴林左旗| 南投县| 安泽县| 沁阳市| 四会市| 宁陕县| 博兴县| 定兴县| 永春县| 枣庄市| 江达县| 建昌县| 梓潼县| 绥化市| 永胜县| 澄迈县| 盖州市| 长阳| 温泉县| 丰镇市| 红安县| 平塘县|