私は最近 C11 を調べましたが、多くの新機能により、C でのコーディングがより簡単になりました。これらの機能はすべて C++11 で公式にサポートされているのではないかと思います。私の懸念は、実装やコンパイラの問題ではなく、新しい C++ 標準です。
3 に答える
主な追加機能のうち、スレッドとアトミックの 2 つが C11 と C++11 で共有されています。また、新しいメモリ シーケンス モデルは 2 つの間で共有されていると思いますが、それを確実に断言できるほど C++11 についてよく知りません。
C11 への主要な追加の 1 つは、おそらく C++ で共有されることは決してないでしょう: type generic expressions with _Generic
. その使用例の多く、特に関数のオーバーロードでは、それを実装する C++ 構造が既に存在します。コンパイル時の整数定数式の検出など、その他のより複雑な使用例は、C++ ではカバーされていません。C++1 にはconstexpr
がありますが、名前以外は、式が定数式であるかどうかを判断するためのツールではなく、オブジェクトまたは関数の戻り値が定数であることを指定するためのツールであることを示唆している可能性があります。2 つのケース (定数と非定数) に対して完全に異なるコードを生成することは不可能に思えます。
C++ の主な使用例では必要ないだけで_Generic
なく、前処理段階でマクロ プログラミングに大きく依存しています。マクロは、C++ コミュニティの大部分によって眉をひそめられているため、これを追加してもコンセンサスが得られないことは確かです。
C++11 標準は、C99 標準、特に C 標準ライブラリを参照しています。
C++11 は、C99 にあって C90 にはない機能の一部をサポートしていますが、すべてをサポートしているわけではありません。(一部の C99 固有の機能は、C++ で異なる方法でサポートされているか、適切と見なされていません。)
C11 は、C99 の上に多くの機能を追加しました。これらの新機能のほとんどは、C++ にも追加されていません。
これに対する注目すべき例外の 1 つは、スレッドのサポートです ( <threads.h>
C11 では<thread>
、C++11 では)。私はこれをよく見ていないので、それらがどれほど似ているかを知ることができません.
(C11 では、C99 の一部の機能だけでなく、一部の新機能もオプションになりました。これも C++ には反映されていません。)