C11_(C_standard_revision)
C ++ 11
と混同しないでください
C11(以前のC1X)は、ISO / IEC 9899:2011の非公式な名前であり、 Cプログラミング言語の過去の標準です。これはC99(標準ISO / IEC 9899:1999)に取って代わり、C17(標準ISO / IEC 9899:2018)に取って代わられました。C11は主に、一般的な最新のコンパイラですでにサポートされている機能を標準化し、複数の実行スレッドをより適切にサポートするための詳細なメモリモデルを備えています。準拠するC99実装の可用性が遅れているため、C11は特定の機能をオプションにして、コア言語標準への準拠を容易にします。
最終ドラフトN1570 は、2011年4月に公開されました。新しい規格は2011年10月10日に最終ドラフトレビューに合格し、ISOによって正式に承認され、2011年12月8日にISO / IEC 9899:2011として公開されました。参加国の機関による解決を必要とするコメントはありません。
標準マクロ__STDC_VERSION__は201112L、C11サポートが利用可能であることを示す値で定義されます。 C11の一部の機能は、バージョン4.6以降のGCC、 バージョン3.1以降のClang、 バージョン12.1以降のIBM XL C、およびVS 2019(16.8以降)以降のMicrosoft Visual C ++でサポートされています。) 2020年9月。
コンテンツ
1 C99からの変更
2 オプション機能
3 批判
4 も参照してください
5 参考文献
6 外部リンク
C99からの変更
この標準には、C99言語とライブラリの仕様に対するいくつかの変更が含まれています。たとえば、
配置仕様(_Alignas指定子、_Alignof演算子、aligned_alloc関数、
_Noreturn関数指定子と
_Genericキーワードを使用した型ジェネリック式。たとえば、次のマクロは、のタイプに応じcbrt(x)てcbrtl(x)、cbrt(x)またはに変換されます。cbrtf(x)x
#define cbrt(x)_Generic((x)、long double:cbrtl、
default:cbrt、
float:cbrtf)(x)
マルチスレッドのサポート(_Thread_localストレージクラス指定子、
改善されたユニコード2004(:CユニコードテクニカルレポートISO / IEC TR 19769に基づいてサポートchar16_tおよびchar32_t保存するためのタイプUTF-16 / UTF-32変換の関数を含む符号化データ、
以前のC言語標準リビジョンであるISO / IEC 9899:1999 / Cor.3:2007(E)で廃止されたgets関数の削除(より安全なものを優先fgets)。
境界チェックインターフェイス(付録K)。
分析機能(付録L)。
非正規化浮動小数点数および型が格納できる10進数の桁数に関して、浮動小数点型の特性を照会するためのより多くのマクロ。
匿名の構造体と共用体。共用体と構造体がネストされている場合に役立ちます。struct T { int tag; union { float x; int n; }; };
静的アサーション。これは、変換者が型を理解したときに、#ifおよびより後のフェーズで変換中に評価#errorされます。
専用の作成およびオープンモード(”…x”サフィックス)fopen。これは、ロックファイルに一般的に使用されるPOSIXのようO_CREAT|O_EXCLに動作します。
quick_exitプログラムを終了するための3番目の方法としての機能で、終了がexit失敗した場合に少なくとも最小限の非初期化を実行することを目的としています。
ある程度のPOSIX互換性をtimespec_get備えた新しい関数と対応する構造。
複素数値を作成するためのマクロ(無限またはNaNのreal + imaginary*I場合、期待値が得られない可能性があるため)。imaginary
オプション機能
新しいリビジョンでは、実装が標準の特定の部分をサポートしないようにすることができます。これには、1999年のリビジョンでサポートすることが義務付けられていた部分も含まれます。プログラムは、事前定義されたマクロを使用して、実装が特定の機能をサポートしているかどうかを判断できます。
C11のオプション機能
特徴 機能テストマクロ C99での可用性
分析可能性(付録L) __STDC_ANALYZABLE__ 利用不可
境界チェックインターフェイス(付録K) __STDC_LIB_EXT1__ 利用不可
マルチスレッド(
__STDC_NO_THREADS__ 利用不可
アトミックプリミティブと型(
__STDC_NO_ATOMICS__ 利用不可
IEC 60559浮動小数点演算(付録F)
__STDC_IEC_559__ オプション
IEC 60559互換の複素数演算(付録G)
__STDC_IEC_559_COMPLEX__ オプション
複合型(
__STDC_NO_COMPLEX__ ホストされた実装には必須
可変長配列
__STDC_NO_VLA__ 必須
批判
参照:
C文字列の処理§置換
オプションの境界チェックインターフェイス(Annex K)は依然として物議を醸しており、広く実装されておらず、それらの非推奨または次の標準リビジョンからの削除が提案されています。このインターフェースの主要な支持者であるマイクロソフトでさえ、定義に準拠しまた、付属書Kは、より有用なTR24731-2(動的割り当て関数)を含むようなないvasprintfとopen_memstream。いくつかのオープンソース実装には、Open Watcom C / C ++の「SaferC 」ライブラリとsafeclibが含まれます。
も参照してください
コンピュータプログラミングポータル
C ++ 20、C ++ 17、C ++ 14、C ++ 11、C ++ 03、C ++ 98、C ++プログラミング言語標準のバージョン
CとC ++の互換性
参考文献
^ 「ISO / IEC9899:2011-情報技術-プログラミング言語-C」。www.iso.org。
^ 「WG14N1250C1X憲章」(PDF)。
^ 「C標準のサブセット化」。www.open-std.org。
^ WG14 N1570委員会ドラフト— 2011年4月12日 ^ 「欠陥レポート#411」。ISO / IEC JTC1 / SC22 / WG14-C。2012年2月。
^ 「GCC4.6リリースシリーズ—変更、新機能、および修正-GNUプロジェクト-フリーソフトウェアファウンデーション(FSF)」。gcc.gnu.org。
^ 「Clang3.1リリースノート」。llvm.org。
^ 「IBMXLC / C ++コンパイラに追加されたISOC11のサポート」。www.ibm.com。
^ 「MSVCに到着するC11およびC17標準サポート」。devblogs.microsoft.com。
^ WG14 N1516委員会ドラフト— 2010年10月4日 ^ 「不可分操作ライブラリ-cppreference.com」。en.cppreference.com。
^ 「WG14N1286—「TR-19769および新しい文字タイプのサポートについて」、Nick Stoughton、Larry Dwyer」(PDF)。
^ ベリンバブコック-マコーネル。「API02-C。配列との間で読み取りまたは書き込みを行う関数は、引数を取り、ソースまたはターゲットのサイズを指定する必要があります」。
^ 「プロセスの放棄」。www.open-std.org。
^ 「複素数値の作成」。www.open-std.org。
^ WG14 N1548委員会ドラフト— 2010年12月2日6.10.8.3条件付き機能マクロ ^ ISO 9899:19996.10.8事前定義されたマクロ名 ^ 「WG14N15583月14〜18日の会議議事録(ドラフト)」(PDF)。
^ ISO 9899:2011プログラミング言語-C 6.7.6.2 4 ^ 「N1969— Annex Kでのフィールドエクスペリエンスの更新—境界チェックインターフェイス」。www.open-std.org。
^ レフラー、ジョナサン。「c-TR24731の「安全な」機能を使用していますか?」。スタックオーバーフロー。
^ 「c-TR24731の「安全な」機能を使用していますか?」。スタックオーバーフロー。
^ 「より安全なCライブラリ-Watcomを開く」。5月3日から2015年アーカイブオリジナルの2015年5月3日に。
^ “”safec:セーフCライブラリ-README””。rurban.github.io。
外部リンク
C1X憲章
N1570、C1Xの最終案は、2011年4月12日付け
ISOCワーキンググループの公式ウェブサイト
PDFに加えて、単純なASCIIおよびリンクされたHTMLフォームの標準ドラフト。
制限付きAPIの安全なCライブラリ
プラム、トーマス
「Cはついに新しい標準を取得します」。ドブ博士の日記。
安全なCAPI-バッファオーバーフローの簡潔なソリューション、OWASP Foundation、OWASP AppSec、北京2011
前任者 C99 C言語標準 成功
C17″