您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言中的ANSI標準是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言中的ANSI標準是什么”吧!
什么是K&R C?
1978年,丹尼斯?里奇(Dennis Ritchie)和布萊恩?柯林漢(Brian Kernighan)合作出版了《C程序設計語言》的第一版。書中介紹的C語言標準也被稱作“K&R C”。
什么是ANSI C、ISO C、C89、C90標準?
隨著C語言使用得越來越廣泛,出現了許多新問題,人們日益強烈地要求對C語言進行標準化。1983年,美國國家標準協會(ANSI)組成了一個委員會,X3J11,為了創立 C 的一套標準。經過漫長而艱苦的過程,該標準于1989年完成,這個版本的語言經常被稱作ANSI C,或有時稱為C89(為了區別C99)。在1990年,ANSI C標準(帶有一些小改動)被美國國家標準協會(ANSI)采納為ISO/IEC 9899:1990。這個版本有時候稱為C90或者ISO C。綜上,ANSI C、ISO C、C89、C90其實是同一種標準。
什么是C99標準?
2000年3月,ANSI 采納了 ISO/IEC 9899:1999 標準。這個標準通常指C99。 C99新增了一些特性,如:支持不定長的數組,即數組長度可以在運行時決定。變量聲明不必放在語句塊的開頭,for語句提倡寫成for(int i=0;i<100;++i) 的形式,即i只在for語句塊內部有效。
什么是C11標準?
C11標準是C語言標準的第三版(2011年由ISO/IEC發布),前一個標準版本是C99標準。與C99相比,C11有哪些變化呢?
1、 對齊處理:alignof(T)返回T的對齊方式,aligned_alloc()以指定字節和對齊方式分配內存,頭文件<stdalign.h>定義了這些內容。
2、 _Noreturn:_Noreturn是個函數修飾符,位置在函數返回類型的前面,聲明函數無返回值,有點類似于gcc的__attribute__((noreturn)),后者在聲明語句尾部。
3、 _Generic:_Generic支持輕量級范型編程,可以把一組具有不同類型而卻有相同功能的函數抽象為一個接口。
4、 _Static_assert():_Static_assert(),靜態斷言,在編譯時刻進行,斷言表達式必須是在編譯時期可以計算的表達式,而普通的assert()在運行時刻斷言。
5、安全版本的幾個函數:gets_s()取代了gets(),原因是后者這個I/O函數的實際緩沖區大小不確定,以至于發生常見的緩沖區溢出攻擊,類似的函數還有其它的。
6、 fopen()新模式:fopen()增加了新的創建、打開模式“x”,在文件鎖中比較常用。
7、 匿名結構體、聯合體。
8、 多線程:頭文件<threads.h>定義了創建和管理線程的函數,新的存儲類修飾符_Thread_local限定了變量不能在多線程之間共享。
9、 _Atomic類型修飾符和頭文件<stdatomic.h>。
10、改進的Unicode支持和頭文件<uchar.h>。
11、quick_exit():又一種終止程序的方式,當exit()失敗時用以終止程序。
12、復數宏,浮點數宏。
13、time.h新增timespec結構體,時間單位為納秒,原來的timeval結構體時間單位為毫秒。
下面看一段程序:
#include <stdio.h>
int main(void)
{
// C99允許在for循環內定義循環變量,而C89不允許
for (int i = 0; i < 5; i++)
{
printf("hello world!\n");
}
return 0;
}
在C89標準下編譯,結果為:
編譯報錯原因為,在C89標準下,循環變量不能在for循環內定義,必須把標準改為C99標準才可正常編譯。以C99編譯的命令為:
gcc -std=c99 test.c -o test.exe
如下圖,以C99編譯能成功編譯:
所以在平時的開發中應該要了解編譯器支持什么標準。因為,有時候編譯出錯是因為當前編譯器支持的標準不同。
GCC編譯器在編譯的時候可指定C語言標準:
指定c90標準: -std=c90
指定C99標準: -std=c99
定C11標準(目前正在開發中): -std=c11
到此,相信大家對“C語言中的ANSI標準是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。