得知 GCC 預先定義之 macro
ANSI C 給予許多彈性,但也造成平台間實做上的落差,雖然在 C99 中予以許多標準化的機制,但 compiler 的良莠不齊讓跨平台開發遇到許多問題。日前一個朋友問及 GCC 內定之 data type 長度與最大值,這沒有一定的答案,因為 GCC 允許在編譯時期改變特定之 data type representation,那麼,要如何確知呢?可參考幾個 macro,如 __WCHAR_MAX__、__INT_MAX__、__LONG_MAX__、... 等,問題來了,有沒有不需要觀察 preprocessor 輸出的方式,能快速得知呢?答案是可以的,只要這麼作:
$ echo | gcc -v -E -dM - | grep '^#define .*MAX'
這樣就可得到 "#define" 開頭並包含 "MAX" 的 macro 定義 (regex),也恰好即是特定 data type 的最大值。又,比方說檢查自己編譯的 Xscale toolchain 是否支援 iWMMXt 指令集 (WirelessMMX),可以這樣測試:
$ echo | arm-linux-gcc -mcpu=iwmmxt -v -E -dM - | grep IWMMXT
如果看到以下輸出:
就表示 GCC 提供此 macro 與其組態配置。
由 jserv 發表於 October 4, 2006 02:35 AM
FYI, this is essentially equivalent to:
$ echo | arm-linux-cpp -mcpu=iwmmxt -dM - |grep IWMMXT