❶ 為什麼c語言有很多不同的版本
C的標准本來就有多個版本,目前編譯器採用的標准比較常見的是ANSI C和C99。另外語言標准中也存在未定義行為,留給編譯器實現自己去定義。各種編譯器對標準的實現也未必完全遵守(C還好,C++這種特別復雜的語言就很難做到完全遵守標准了),而且往往還增加一些自己的擴展,預定義宏之類的。這些都給跨編譯器編碼帶來麻煩。不過總體而言C是個比較單純的語言,除非程序員故意,一般搞不出太多給編譯器出難題的花樣。
❷ c++的c++11標准。
c++11標准由國際標准化組織(ISO)和國際電工委員會(IEC)旗下的C++標准委員會(ISO/IEC JTC1/SC22/WG21)於2011年8月12日公布[2] ,並於2011年9月出版。2012年2月28日的國際標准草案(N3376)是最接近於C++11標準的草案(僅編輯上的修正)。此次標准為C++98發布後13年來第一次重大修正。
1.對C++核心語言的擴充
2.核心語言運行期的強化(右值引用和 move 語義;泛化的常數表達式;對POD定義的修正)
3.核心語言建構期表現的加強(外部模板)
4.核心語言使用性的加強(初始化列表;統一的初始尺賣圓化;類型推導[auto關鍵字];以范圍為基礎的 for 循環;Lambda函數與表示法;另一種的函數語法;對象構建的改良;顯式虛函數重載;空指針;強類型枚舉;角括弧;顯式類型轉換;模板的別名;無限制的unions)
5.核心語言能力的提升(變長參數模板;新的字元串字面值;用戶自定義的字面值;多任務存儲器模型;thread-local的配搭存儲期限;使用或禁用對象的默認函數;long long int 類型;靜態assertion;允許sizeof運算符作用在類型的數據成員上,無需明確的對象;)
6.C++標准程序庫的變更陵塌(標准庫組件的升級;線程支持;多元組類型;散列表;正則表達式;通用智能指針;可擴展的隨機數功能;包裝引用;多態函數對象包裝器;用於元編程的類型屬性;用於計算函數對象返回類型的統一方法)
❸ ANSI C標準的主要編譯器的支持
ANSI C現在被幾乎所有廣泛使用的編譯器支持。現在多數C代碼是在ANSI C基礎上寫的。任何僅僅使用標准C並且沒有任何硬體依賴假設的代碼實際上能保證在任何平台上用遵循C標準的編譯器編譯成功。如果沒有這種預防措施,多數程序只能在一種特定的平台或特定的編譯器上編譯,例如,使用非標准庫,例如圖形用戶界面庫,或者有關編譯器或平台特定的特性例如數據類型的確切大小和位元組序.
[編輯]選擇編譯 為了減輕K&R C和ANSI C標准,__STDC__(standard c)宏可以被用來將代碼分割為ANSI和K&R部分。
#if __STDC__
externint getopt(int,char*const*,constchar*);
#else
externint getopt();
#endif
上面最好使用#if __STDC__而不是#ifdef __STDC__,因為一些實現可能會把 __STDC__設置為0來表示不遵循ANSI C。__STDC__能處理任何沒有被宏替換或者值為0的標示符。因而即使宏__STDC__沒有定義來表示不遵循ANSI C,__STDC__仍然能像顯示的那樣工作。
在上面的例子,一個原型中使用了ANSI實現兼容的函數聲明,而另一個使用了過時的非原形聲明。它們在C99和C90中依舊是ANSI兼容的,但並不被鼓勵使用。
❹ c/c++有哪些標准
C++真正正式公布的標准就三個: C++98、C++03、C++11。其中C++98是第一個正式C++標准,C++03是在C++98上面進行了小幅度的修訂,C++11則是一次全面的大進化(之前稱C++11為C++0x,以為會在08~09年公布,沒想到拖到了11年)。其實C++在第一個標准C++98之前就已經廣為使用了褲中。只不過那時候還沒有一個官方的統一標准,後來才開始起草標准草案,起草了n年,直到98年才最終發布。(所碼做以一些早期遲純衡的C++編譯器對標準的支持程度很差,比如經典的VC6.0,在研發的時候C++的第一個標准還沒公布呢!)至於什麼C89、C99這些,是C語言的標准,不是C++的標准,很容易被一些人混淆。
❺ C語言在世界上有幾個標准
最初是有ANSI C標准,然後ANSI把這個標准提交到ISO(畢竟ISO是國際化標准組織),ISO採納為國家標准。ISO C與ANSI C內容基本相同,主要是格式組織不蔽敗一樣。這個標準是89年發布的,通常稱為C89.
99年ISO發布了新的C標准,通常稱為C99.
因為ANSI與ISO的C標准內容基本相同,所以對於C標准,可以稱為ANSI C,也可以說是ISO C,或者ANSI/ISO C。
此外沒有C標准。不伏並慶存在什麼GNU C標准。
GNU計劃中含多個內容缺握,其中包括開發C/C++編譯器。這個編譯器通常簡稱為GCC(GNU C/C++ compiler)
總而言之,ANSI/ISO C是語言標准。GCC是具體的編譯器,它必須符合ANSI/ISO C標準的要求。
❻ c1和c2有什麼區別 理解c1和c2的異同點
c1標準的編譯器並不支持所有的c2標準的語言特性和庫函數,而c2標準的編譯器則可以支持c1標准和c2標準的語言特性和庫函數。
由於c2標准增加了很多新的語言特性和庫函數,因此c2標準的代碼可能無法在c1標準的編譯器上編譯通過。而c1標準的代碼則可以在c2標準的編譯器上舉飢搏編譯通過,但可能無法使用c2標準的新特性和庫函數。
C語言的庫函數是非常重要的部分,它們提供了豐富的功能和操作。c2標准在c1的基礎上增肢宏加了一些新的庫函數,如sinh()、cbrt()、exp2()等。
4. 兼容性
總之,c1和c2是C語言的兩個重要標准,它們在語言規范、語法特性、庫函數等方面存在差正祥異。在編寫C語言程序時,需要根據具體需求選擇合適的標准,並考慮編譯器的支持和代碼的兼容性。
在C語言的發展歷程中,c1標準是在1989年發布的,而c2標准則是在1999年發布的。相比於c1,c2標准在語言規范、語法特性、庫函數等方面都進行了改進和擴展。
❼ C語言編譯器是什麼
C語言是一門面向過程的計算機編程語言,與C++、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速,工作量小、可讀性好,易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%~20%。因此,C語言可以編寫系統軟體。[2]
二十世紀八十年代,美國國家標准局為了避免各開發廠商用的C語言語法產生差異,給C語言制定了一套完整的美國國家標准語法,稱為ANSI C。作為C語言最初的標准。[3]2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言編譯器普遍存在於各種不同的操作系統中,例如Microsoft Windows, Mac OS X, Linux, Unix等。C語言的設計影響了眾多後來的編程語言,例如C++、Objective-C、Java、C#等。
例:
#include <stdio.h>
int main() {
printf("Hello,world!");
return 0;
}
編譯運行將輸出: Hello,world!
❽ C89,C99,C11等C語言標準是干嗎的
C語言的標准就是定義任何一個支持該標準的C語言編譯器必須支持的語法和必須提供的庫。新的標準是在舊標準的基礎上進行擴展,一般都是向後兼容的。
不過現在的編譯器對C語言標準的支持不太積極(主要精力放在C++上面),比如VC++編譯器只是部分支持了C99,所以新的C語言標准不太實用,你最好還是好好學習C89標准,現在的C語言教程一般都是以這個標准。
❾ 如何知道當前編譯器是否是C99標準的有什麼指令可以查到
#include<stdio.h>
int main()
{
#if (!defined(__STDC__))
printf("非標准C!");
#elif defined(__STDC_VERSION__)
printf("標准C版本:%ld。", __STDC_VERSION__);
#else
printf("舊的標准C。");
#endif
getchar();
return 0;
}
預定義宏__STDC__表示標准C。__STDC_VERSION__表示標准C版本。C99對應的是199901L。
(注意有些編譯器默認沒有定義__STDC_VERSION__,甚至沒定義__STDC__。所以查編譯器手冊更保險一點。)
====
[原創回答團]
❿ 請問什麼編譯器支持c99標准
告訴你一個壞消息
vc++
2005支持的是c89
而不是c99
這點可以在一次對vs2005的負責人的采訪中看出來
他解釋了為什麼vs2005支持c89
而不支持c99
目前完全支持c99標準的編譯器還不存在
支持部分c99標準的編譯器也不多
做的最好的是gcc