準拠したC++ 98/03/0x実装のすべての関数は完全にC99に準拠していますか?C++ライブラリのC部分は自動的にC99ですか?
私はC++ 0xにいくつかのC99(言語)機能を追加したと思っていましたが、Cライブラリ関数について何も耳にしたり読んだことはありませんでした。
ちょうど混乱を避けるために、私は<c*>
ヘッダーセットで宣言された関数を使ってC++プログラムについて話しています。
ありがとうございました。
準拠したC++ 98/03/0x実装のすべての関数は完全にC99に準拠していますか?C++ライブラリのC部分は自動的にC99ですか?
私はC++ 0xにいくつかのC99(言語)機能を追加したと思っていましたが、Cライブラリ関数について何も耳にしたり読んだことはありませんでした。
ちょうど混乱を避けるために、私は<c*>
ヘッダーセットで宣言された関数を使ってC++プログラムについて話しています。
ありがとうございました。
C99標準ライブラリのほとんどはC++ 0Xでインポートされていますが、すべてではありません。メモリからは、インポートされなかったもので
<ctgmath>
それは<complex>
<cmath>
が完了し、過負荷やテンプレート機能を提供する(かなりの数の調整を持っている含まれているかのよう単に<ccomplex>
と<cmath>
、<ccomplex>
振る舞いを含んでもありますC99は1つを提供しました)<cstdbool>
,<iso646.h>
、...)は、言語間の違いを考慮に入れて調整しました(bool
はC++ではプリミティブであり、例えばCで<stdbool.h>
によって提供されるマクロですが、数学部分のスコープは何もありません。 <xxx.h>
その<cxx>
フォームC99版として動作しません。単にグローバル名前空間で<cxxx>
の内容を宣言しヘッダは、彼らがC99 <xxx.h>
内容の近いではありません。
関連するもの:C++ 0XはCXXX及びC99で定義されていないxxx.h形態の両方でいくつかのヘッダーを提供し(<cstdalign>
と<cuchar>
、第二つがC TRに定義されている)
(私は、C99の数学関数の束はTR1に入れられましたが、C++ 0Xでは保持されていなかったことを思い出しました。私は数学関数の束が最初はC99の一部ではないと誤解しました。
No. C++ 03は、C99ではなくANSI C89/ISO C90に対応しています。
今後のC++ 0x標準は、C99である程度整列すると予想されます。のパラグラフ17.6.1.2を参照してください。ccomplex
、cinttypes
、cstdint
などです。AProgrammerに言及されているように、一部のヘッダーはまったく同じではありません。さらに、ヘッダcuchar
がC99ではなくC Technical Report 19769に揃っていること。
一部のヘッダーのコンテンツは、C99コンテンツではありません。 – AProgrammer
@AProgrammer:あなたは 'cuchar'などを意味しますか?それは正しいですが、ヘッダーの内容がまったく同じであるとは決して言いませんでした(いくつかの違いを指定するために+1を与えました)。私はあなたのことをコピーせずに、私の答えにいくつかの詳細を入れます。 –