系統呼叫和庫函式的標準有多種多樣(unix 、posix、bsd、v等),為了使我們編寫的程式具有高度的相容性,在編譯時需要指定或弄清楚程式所在執行環境的型別。在程式設計時,在引進標頭檔案之前利用#ifdef
語句來判斷程式執行環境並分別引用不同的標頭檔案。然後在命令列編譯時,提供指定選項來設定本次編譯的環境。
$ cc -d_bsd_source prog.c
_posix_c_source
遵循的標準
1posix.1-1990和iso c(1990)
199309
posix.1b(realtime)
199506
posix.1c(threads)
200112
posix.1-2001(xsi擴充套件)
200809
posix.1-2008
_xopen_source
遵循的標準
<500
posix.1、posix.2、x/open(xpg4)
500susv2(unix98和xpg5)
600susv3 xsi(unix03)和c99
700susv4 xsi
在乙個程式中,如果遵循posix.1-2001/susv3標準,則同時設定_posix_c_source=200112及_xopen_source=600。類似的,如果如果遵循posix.1-2008/susv4標準設定_posix_c_source=200809及_xopen_source=700。_bsd_source
遵循的標準
任意值bsd標準;效果同將_posix_c_source設定為199506
_svid_source
遵循的標準
任意值系統v介面定義標準(svid)
_gnu_source
遵循的標準
任意值上文所述所有標準均相容
$ cc -d_posix_source -d_posix_c_source=199506 -d_bsd_source -d_svid_source prog.c
嵌入式linux&arm
csdn部落格
知乎專欄
gcc D選項定義巨集
gcc的 d選項可以定義巨集。假設程式需要很多巨集,不可能這些巨集都在編譯器中定義,可以說比較重要的巨集才會放在gcc的d選項後邊。dname 定義巨集name,預設定義內容為字串 1 dname defn 定義巨集name,並且內容為defn 測試程式 include int main 執行編譯命...
gcc D選項 巨集定義
dname 定義巨集name,預設定義內容為字串 1 dname defn 定義巨集name,並且內容為defn c語言中使用 define來定義巨集,gcc也可以定義巨集給源 使用。不過gcc d選項就簡陋很多,和 define的簡單用法是一致的。但是其本質是巨集的替換。應該是在預處理階段直接替換...
UNIX標準化及實現之功能測試巨集
在標頭檔案中定義了很多posix.1和xsi的符號。但是除了posix.1和xsi的定義之外,大多數實現在這些標頭檔案中也加上了它們自己的定義。如果在編譯乙個程式時,希望它只使用posix定義而不使用任何實現自己定義的限制,那麼就需要定義常量 posix c source。所有posix.1標頭檔案...