Linux
為什麼 Linux 上的 limits.h 中沒有 WORD_BIT?
從手冊頁
man limits.h
:{WORD_BIT} Number of bits in an object of type int. Minimum Acceptable Value: 32
但是,如果我執行一個簡單的程序:
#include <limits.h> #include <stdio.h> int main() { printf("%d\n", WORD_BIT); return 0; }
但是,當嘗試使用 gcc (
gcc file.c -o file
) 進行編譯時,我得到以下資訊:error: ‘WORD_BIT’ undeclared (first use in this function)
為什麼我的系統上沒有定義,我還能在哪裡找到這些資訊(在 C 程序中)?
我的系統:
- Fedora 36(銀藍色)
- gcc 版本 12.2.1 20220819 (Red Hat 12.2.1-1) (GCC)
- ldd (GNU libc) 2.35
我不確定這是否記錄在案,但是使用 GNU C 庫,您需要設置
_GNU_SOURCE
為WORD_BIT
:$ gcc -include limits.h -E - <<<"WORD_BIT" | tail -n1 WORD_BIT $ gcc -D_GNU_SOURCE -include limits.h -E - <<<"WORD_BIT" | tail -n1 32
你真的應該使用
sysconf
:#include <unistd.h> #include <stdio.h> int main(int argc, char **argv) { printf("%ld\n", sysconf(_SC_WORD_BIT)); }
或者,按照 GNU C 庫文件中的建議:
#include <limits.h> #include <unistd.h> #include <stdio.h> int main(int argc, char **argv) { #ifdef WORD_BIT printf("%d\n", WORD_BIT); #else printf("%ld\n", sysconf(_SC_WORD_BIT)); #endif }
(至於為什麼會出現在 中
man limits.h
,這個手冊頁是的 POSIX 參考limits.h
,並不一定會準確記錄您系統上的 C 庫。您可以通過查看手冊頁的部分來了解這一點——“P”後綴表示它是 POSIX 文件。)你可以
sizeof(int) * CHAR_BITS
改用;CHAR_BITS
總是被定義的。更重要的是,POSIX 擴展了 C 標準並指定CHAR_BITS
為 8,因此如果您假設 POSIX,您可以使用sizeof(int) * 8
.