[英]What's the difference between GNU99 and C99 (Clang)?
我看到了編譯器選項GNU99和C99。 它們的區別是什么? 任何細節文件? (Clang,Xcode,Mac OS X)
clang支持-std選項,它可以更改clang使用的語言模式。 C的支持模式是c89,gnu89,c94,c99,gnu99以及這些模式的各種別名。 如果未指定-std選項,則clang默認為gnu99模式。
所有c *和gnu *模式之間的差異:
- c *模式定義
__STRICT_ANSI__
。- 特定於目標的定義不以下划線為前綴,如“linux”,在gnu *模式中定義。
- Trigraphs默認在gnu *模式下關閉; 它們可以通過
-trigraphs
選項啟用。- 解析器將“asm”和“typeof”識別為gnu *模式中的關鍵字; 變體
__asm__
和__typeof__
在所有模式中都被識別。- 某些平台上的gnu *模式默認識別Apple“blocks”擴展名; 可以使用
-fblocks
選項在任何模式下啟用它。
C99是直接C99,GNU99是帶有gnu擴展名的C99。 請參閱GCC聯機幫助頁 。
從1999年開始,C99就是C標准的版本,我們都知道。 在GCC,它沒有得到完全支持。
GNU99是C99的擴展,就像GNU98是C98的擴展一樣。 來自文檔:
ISO C99加上GNU擴展。 當ISO C99在GCC中完全實現時,這將成為默認值。 名稱gnu9x已棄用。
Clang也支持這些擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.