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í)專欄