簡體   English   中英

C99標准有什么意義?

[英]What is the point of the C99 standard?

C99為該語言添加了一些有用的功能,但我發現很難推薦任何依賴於C99的練習。 這是因為C99語言的實際實現很少(任何?)。 當然,在一些編譯器中支持有限,但沒有人願意花時間編寫C代碼只是為了讓它不可移植。

考慮到標准是在10年前編寫並最終確定的,這是令人沮喪的。 另外,我不時聽到有關C1x的討論,我想知道為什么有人會采取措施修改語言,因為當前版本的語言還沒有實現。

所以我的問題是,作為喬今天的C程序員,我對C99標准有什么用處(如果有的話)?

C99帶來的功能真正使C語言編程更容易,更安全:

  • 指定的初始化者
  • 復合文字
  • for -scope變量
  • 固定寬度整數類型

這種語言也更具表現力

  • 可變宏
  • inline函數

在我的linux機器上,我有四個支持C99的編譯器達到令人滿意的程度,使其可以在日常基礎上使用: gccclangopenccicc

前兩個是開源編譯器,其中clang試圖與gcc代碼兼容(意味着C99支持大致相同)。

后兩者來自兩個主要的CPU生產商,並且是商業性的,但對非商業用戶有慷慨的許可政策。 他們的C99有點少,特別是他們inline的支持似乎與標准不完全一致。

MSVC不會,也不會支持C99。 但微軟幾乎沒有動力更新他們的C編譯器。 這並不是說他們會失去太多的業務。

但是有很多編譯器都支持C99。

http://en.wikipedia.org/wiki/C99#Implementations

關於gcc:

http://gcc.gnu.org/c99status.html

你是對的,或許C99對於庫代碼沒有用(並且可能永遠不會沒有微軟的支持),但如果你正在從事內部或個人項目,你可以選擇編譯器和工具,那么可移植性不是很多問題。

關於C1x,我認為值得注意的是,標准委員會非常清楚C99尚未被廣泛采用,並且不想重復相同的錯誤(或使情況更糟)。 來自C1x章程

與C9X不同,倫敦會議的共識是沒有任何發明,毫無例外。 只應考慮那些具有歷史並且通過商業實現共同使用的功能。 此外,必須注意以一種使標准和商業實現兼容的方式標准化這些功能。

和:

原始標准得到了用戶和供應商社區的積極響應。 但是,C99並沒有得到如此廣泛的接受。

每當您沒有鎖定在不支持C99的環境中時(尤其是嵌入式系統),您應該使用C99。

是的,如果您知道您的庫將被使用MSVC的人使用,您不能在接口中使用C99功能,但沒有理由不在實現中使用C99(當然除了庫功能依賴性之外) )。

原始答案:“呃?哪些編譯器不支持C99?當你從編譯器轉到工具時,C99實際上比C89更受支持。”

如果你關心表現,就沒有辦法restrict

FreeBSD現在使用Clang進行內核編譯,而且非常支持C99。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM