c語言新標准
① c語言新標准相對c99有哪些變化
1. 對齊處理操作符 alignof,函數 aligned_alloc(),以及 頭文件 <stdalign.h>。見 7.15 節。
2. _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。例子:
_Noreturn void thrd_exit(int res);
3. _Generic 關鍵詞,有點兒類似於 gcc 的 typeof。示例代碼:
4. 靜態斷言( static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。例子:
_Static_assert(FOO > 0, "FOO has a wrong value");
5. 刪除了 gets() 函數,C99中已經將此函數被標記為過時,推薦新的替代函數 gets_s()。
6. 新的 fopen() 模式,(「…x」)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。
7. 匿名結構體/聯合體,這個早已經在 gcc 中了,我們並不陌生,定義在 6.7.2.1 p13。
8. 多線程支持,包括:_Thread_local,頭文件 <threads.h>,裡麵包含線程的創建和管理函數(比如 thrd_create(),thrd_exit()),mutex (比如 mtx_lock(),mtx_unlock())等等,更多內容清參考 7.26 節。
9. _Atomic類型修飾符和 頭文件 <stdatomic.h>,見 7.17 節。
10. 帶邊界檢查(Bounds-checking)的函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。更多參考 Annex K。
11. 改進的 Unicode 支持,新的頭文件 <uchar.h> 等。
12. 新增 quick_exit() 函數,作為第三種終止程序的方式,當 exit() 失敗時可以做最少的清理工作(deinitializition),具體見 7.22.4.7。
13. 創建復數的宏, CMPLX(),見 7.3.9.3。
14. 更多浮點數處理的宏 (More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store)。
15. struct timespec 成為 time.h 的一部分,以及宏 TIME_UTC,函數 timespec_get()。
② 各種C語言標准與區別
GNU C 允許零長度數組
GNU C 允許定義長度為0的數組,可能很多人會問長度為0的數組有什麼用啊。其實我們可以定義一個長度為0的數組,那麼這個數組是不佔用內存空間的,但是 我們可以通過這個數組來訪問數組後面的數據,比如一個結構體:
struct data_pra
{
char name;
char num[0];
char year;
charr month;
...
};
struct data_pra data;
就可以通過調用data.num[0]獲得year數據,data.num[1]來獲得month的數據。如果他們的類型相同,並且取值范圍相同,我們要對他們進行范圍檢查,這是我們就可以通過for循環來實現,而不需要獲取每個數據的值,再進行取值范圍判斷了。
GNU支持case 取值范圍用法
GNU C 支持case x…y 語法,區間[x,y]的數都會滿足這個case的條件,我們在不考慮if判斷的情況下,如整數a的取值范圍為0-5,當0<3時執行fun1函數,大於等於3時執行fun2();則GNU C可以通過以下代碼實現:
switch(a)
{
case 0..: 2:fun1();
break;
case 3…5: fun2();
break;
}
而不是
switch(a)
{
case 0
case 1;
case 2:
fun1();
break;
case 3:
case 4;
case 5:
fun2();
break;
}
如果條件越多,這種實現方案就越簡單方便。也便於其他人員閱讀代碼。
語句表達式
GNU C把包含在括弧里的復合語句看做是一個表達式,稱為語句表達式,它可以出現在任何允許表達式的地方。可以在語句表達式中使用原本只能在復合語句中使用的循環變數、局部變數等,例如:
#define min_t(type,x,y) ({type __x=(x); type __y=(y);__x<__y?__x:__y})
int ia,ib,mini;
mini=min_t(int,ia,ib);
這樣,因為重新定義了__x和__y這兩個局部變數,所以上述方法定義的宏將不會有副作用。在標准C中,對應的宏通常會有副作用
typeof關鍵字
typeof(x) 可以獲得x的類型,因此,可以藉助typeof重新定義上一條提到的min_t這個宏
#define min(x,y) /
({ /
const typeof(x) _x=(x);/
const typeof(y) _y=(y);/
(void) (&_x==&_y);/
_x<_y ? _x: _y ; })
不需要像上一條時那樣傳一個type進去,因為通過typeof(x)可以得到type。
代碼 (void) (&_x==&_y);的作用是檢查_x和_y的類型是否一致。
可變參數的宏
標准C只支持可變參數的函數,意味著函數的參數可以是不固定的
例如printf()函數的原型是
int printf(const char *format [,argument]…)
而在GNU C中,宏也可以接受可變數目的參數,例如
#define pr_debug(fmt,arg…) printk(fmt,##arg)
這里arg表示其餘的參數可以是零個或多個,這些參數以及參數之間的逗號構成arg的值,
在宏擴展時替換arg ,例如
pr_debug(「%s:%d」,filename,line);
被擴展為
printk(「%s:%d」,filename,line);
使用##的原因是為了處理arg不代表任何參數的情況,這時候,前面的逗號就變得多餘了。
使用##之後,GNU C預處理器會丟棄前面的逗號
pr_debug(「success!/n」) 會被正確擴展為 printk(「success!/n」)
而不是 printk(「success!/n」,);
③ 最新的c語言標準是哪個
C語言最新標準是C99. 即1999年出的最新C語言標准。
後續C語言不再出新標准,而是轉向C++標準的完善。最新的C++標准為2011年出的C++11.
C語言歷史版本:
1988年, 美國國家標准研究所(ANSI)為C語言制定了第一套C語言標准,即ANSI標准,在1990年,ISO再次採用了這種標准,所以也有一種別稱叫「C90」。
1999年,ISO對C語言進行了修訂,簡稱「C99」。後來ANSI又採用了這種標准。
④ c程序語言現行標準是什麼標准
c語言現行最新標准為c11標准
2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)再次發布了C語言的新標准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,簡稱C11標准,原名C1X。這是C語言的第三個官方標准,也是C語言的最新標准。
⑤ C89,C99,C11等C語言標準是干嗎的
C語言的標准就是定義任何一個支持該標準的C語言編譯器必須支持的語法和必須提供的庫。新的標準是在舊標準的基礎上進行擴展,一般都是向後兼容的。
不過現在的編譯器對C語言標準的支持不太積極(主要精力放在C++上面),比如VC++編譯器只是部分支持了C99,所以新的C語言標准不太實用,你最好還是好好學習C89標准,現在的C語言教程一般都是以這個標准。
⑥ C語言最新的標準是什麼
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
C99
⑦ 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標準的要求。
⑧ C語言最新版本是什麼
你是說語言標准還是ide?
關於標准網路如下:1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchie合著了著名的《The C Programming Language》一書。通常簡稱為《K&R》,也有人稱之為《K&R》標准。但是,在《K&R》中並沒有定義一個完整的標准C語言,後來由美國國家標准化協會(American National Standards Institute)在此基礎上制定了一個C語言標准,於一九八三年發表。通常稱之為ANSI C。
K&R第一版在很多語言細節上也不夠精確,對於pcc這個「參照編譯器」來說,它日益顯得不切實際;K&R甚至沒有很好表達它所要描述的語言,把後續擴展扔到了一邊。最後,C在早期項目中的使用受商業和政府合同支配,它意味著一個認可的正式標準是重要的。因此(在M. D. McIlroy的催促下),ANSI於1983年夏天,在CBEMA的領導下建立了X3J11委員會,目的是產生一個C標准。X3J11在1989年末提出了一個他們的報告[ANSI 89],後來這個標准被ISO接受為ISO/IEC 9899-1990。
1990年,國際標准化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。
1995年,ISO對C90做了一些修訂,即「1995基準增補1(ISO/IEC/9899/AMD1:1995)」。1999年,ISO有對C語言標准進行修訂,在基本保留原來C語言特徵的基礎上,針對應該的需要,增加了一些功能,尤其是對C++中的一些功能,命名為ISO/IEC9899:1999。
2001年和2004年先後進行了兩次技術修正。 目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則有略有差別。
c語言主流編譯器最新的是vc++2010(包含在vs2010中), gcc4.6
⑨ 現在的c語言標準是c99嗎
C99是標准ISO/IEC 9899:1999的簡稱。
2011年12月8號,ISO 發布了新的 C 語言的新標准——C11,之前被稱為C1X,官方名稱 ISO/IEC 9899:2011。
C11是目前最新的C語言標准。
⑩ C語言的標准
std