C99 和 GNU99 的區別

Undefined443發表於2024-10-16

在討論 gun99c99 之間的區別時,首先需要澄清這兩個術語的含義和背景。

C99與GNU99的定義

  • C99: 這是1999年釋出的C語言標準(ISO/IEC 9899:1999)。它引入了許多新特性,如布林型別、複合字面量、可變引數宏等。使用 c99 編譯器選項時,程式碼將遵循這一標準。

  • GNU99: 這是基於C99標準的GNU擴充套件版本。使用 gnu99 選項時,除了C99的特性外,還可以使用GNU編譯器(GCC)提供的一些額外功能和擴充套件。這些擴充套件可能包括額外的語法和庫函式,這些在標準C中並不被支援。

主要區別

特性 C99 GNU99
標準 遵循ISO C99標準 C99加上GNU擴充套件
擴充套件 不支援GNU特有擴充套件 支援GNU特有擴充套件
相容性 嚴格遵循標準 允許使用非標準的GNU特性
預設設定 不定義__STRICT_ANSI__ 定義__STRICT_ANSI__以禁用所有GNU擴充套件

使用頻率

在實際應用中,GNU99 更為常用,尤其是在使用GCC編譯器的環境中。由於GCC廣泛用於各種開發環境,許多開發者傾向於利用其擴充套件功能來簡化程式設計或提高效能。因此,儘管 c99 提供了一個嚴格的標準環境,但在實際開發中,gnu99 的靈活性使其成為更常見的選擇。

總之,如果您希望您的程式碼嚴格遵循C99標準,您可以選擇 c99;如果您希望利用GCC的擴充套件功能,則應選擇 gnu99

Citations:
[1] https://cloud.tencent.com/developer/ask/sof/112813210
[2] https://www.cnblogs.com/-colin/p/8257162.html
[3] https://stackoverflow.com/questions/5313536/whats-the-difference-between-gnu99-and-c99-clang
[4] https://gcc.gnu.org/onlinedocs/gcc/Standards.html
[5] https://stackoverflow.com/questions/17206568/what-is-the-difference-between-c-c99-ansi-c-and-gnu-c