UNIX標準化及實現之功能測試巨集

2022-05-04 20:33:11 字數 1276 閱讀 8176

在標頭檔案中定義了很多posix.1和xsi的符號。但是除了posix.1和xsi的定義之外,大多數實現在這些標頭檔案中也加上了它們自己的定義。如果在編譯乙個程式時,希望它只使用posix定義而不使用任何實現自己定義的限制,那麼就需要定義常量_posix_c_source。所有posix.1標頭檔案中都使用此常量。當定義該常量時,就能排除任何實現專有的定義。

注:posix.1標準的以前版本都定義了_posix_source常量。在posix.1的2001版中,它被替換為_posix_c_source。

常量_posix_c_source及_xopen_source被稱為功能測試巨集(feature test macro)。所有功能測試巨集都以下劃線開始。當要使用它們時,通常在cc命令列中以下列方式定義:

cc -d_posix_c_source=200112 file.c

這使得c程式包括任何標頭檔案之前,定義了功能測試巨集。如果我們僅想使用posix.1定義,那麼也可將原始檔的第一行設定為:

#define _posix_c_source 200112

為使single unix specification v3的功能可由應用程式使用,需將常量_xopen_source定義為600。

single unix specification將c99實用程式定義為c編譯環境的介面。隨之,就可以用如下方式編譯檔案:

c99 -d_xopen_source=600 file.c -o file

為了在gcc c編譯器中啟用1999 iso c擴充套件,可以使用-std = c99選項,如下所示:

gcc -d_xopen_source=600 -std=c99 file.c -o file

另乙個功能測試巨集是:__stdc__,它由符合iso c標準的c編譯器自動定義。這樣就允許我們編寫iso c編譯器和非iso c編譯器都能編譯的程式。例如,為了利用iso c原型功能(如果支援),乙個標頭檔案可能包含:

#ifdef __stdc__

void *myfunc( const

char *, int

);#else

void *myfunc();

#endif

雖然,當今的大多數c編譯器都支援iso c標準,但在很多標頭檔案中仍舊使用__stdc__功能測試巨集。

本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:

UNIX標準化及實現之功能測試巨集

在標頭檔案中定義了很多posix.1和xsi的符號。但是除了posix.1和xsi的定義之外,大多數實現在這些標頭檔案中也加上了它們自己的定義。如果在編譯乙個程式時,希望它只使用posix定義而不使用任何實現自己定義的限制,那麼就需要定義常量 posix c source。所有posix.1標頭檔案...

Unix 標準化以及實現

一 unix標準化 1 ansi c ansi c標準的意圖是提供c程式的可移植性,使其能適合於大量不同的作業系統,而不只是unix。此標準不僅定義了c程式設計 語言的語法和語義,也定義了其標準庫。按照該標準定義的各個標頭檔案,可將該庫分成15區。2 ieee posix posix是乙個由ieee...

Unix 標準及實現

人們在 unix 程式設計環境和 c 程式語言的標準化方面已經做了很多努力工作。在20世紀80年代 unix 版本種類快速增加,隨之而來的是它們之間的差別擴大,為了使不同種類的 unix 系統之間應有程式可以順利移植,人們開始呼籲進行unix標準化。自從 1989年 美國國家標準化 ansi 提供c...