C11標準是 ISO/IEC 9899:2011 - Information technology -- Programming languages -- C 的簡稱,曾用名為C1X。
C11標準是C語言標準的第三版,前一個標準版本是C99標準。2011年12月8日,國際標準化組織(ISO)和國際電工委員會(IEC) 旗下的C語言標準委員會(ISO/IEC JTC1/SC22/WG14)正式發布了C11標準。
C11標準的最終定稿的草案是免費開放的,為N1570,但是正式標準檔案需要198瑞士法郎。
當前,支持此標準的主流C++語言編譯器有:GCC、Clang、Intel C++ Compiler等。
基本介紹
- 中文名:C11
- 外文名:C11
- 曾用名:C1X
- 標準編號:ISO/IEC 9899:2011
- 發布時間:2011年12月8日
- 發布機構:ISO/IEC JTC1/SC22/WG14
相比C99的變化
#include<stdio.h>#defineGENERAL_ABS(x)_Generic((x),int:abs,float:fabsf,double:fabs)(x)int main(void){ printf("intabs:%d\n",GENERAL_ABS(-12)); printf("floatabs:%f\n",GENERAL_ABS(-12.04f)); printf("doubleabs:%f\n",GENERAL_ABS(-13.09876)); int a=10; int b=0,c=0; _Generic(a+0.1f,int:b,float:c,default:b)++; printf("b=%d,c=%d\n",b,c); _Generic(a+=1.1f,int:b,float:c,default:b)++; printf("a=%d,b=%d,c=%d\n",a,b,c);}
#include<stdio.h>#include<uchar.h>size_t UTF16StrLen(constchar16_t*utf16String){ if(utf16String==NULL) return0; size_t index; for(index=0;utf16String[index]!=u'\0';index++); returnindex;}size_t UTF16ToUTF8(char*mbBuffer,constchar16_t*utf16String){ if(mbBuffer==NULL||utf16String==NULL) return0; mbstate_t state={}; size_t mbIndex=0; for(int utf16Index=0;utf16String[utf16Index]!=u'\0';utf16Index++) { constsize_tlength=c16rtomb(&mbBuffer[mbIndex],utf16String[utf16Index],&state); mbIndex+=length; } mbBuffer[mbIndex]='\0'; return mbIndex;}int main(intargc,char*argv[]){ char16_t ch=u'好'; char chBuffer[64]; mbstate_t state={}; size_t length=c16rtomb(chBuffer,ch,&state); chBuffer[length]='\0'; printf("TheUTF-8characterlengthis:%zu,andthecharacteris:%s\n",length,chBuffer); const char * utf8Str=u8"你好,世界。"; printf("TheUTF-8stringis:%s\n",utf8Str); const char16_t *utf16Str=u"你好,世界。"; printf("Theutf16stringlengthis:%zu\n",UTF16StrLen(utf16Str)); length=UTF16ToUTF8(chBuffer,utf16Str); printf("TheUTF-8stringlengthis:%zu,andthecontentis:%s\n",length,chBuffer); printf("IftheconvertedUTF-8stringisequaltotheoriginalone?%s\n",strcmp(chBuffer,utf8Str)==0?"YES":"NO");}