2016-06-02 11 views
13

私はC++標準ライブラリヘッダーにC標準ヘッダーを含めることはできますか?

[res.on.headers/1] C++ヘッダは、他のC++ヘッダを含むことができること標準草案N4582で見つけることができます。

C++ヘッダーにC標準ヘッダーを含めることができるかどうかを指定していないようです。

もし許可されていれば、このヘッダが含まれていなくても(プログラムが暗黙的にいくつかのC++標準ヘッダを通してヘッダを含んでいるかもしれないので)、C標準ヘッダで定義されたグローバル名を使うのは危険ですか?

+0

私はずっとこれをやっていました(実際にはCとC++のコードを一緒に混合していました)。それが標準に従って許可されるかどうか、私は言うことができませんでした。 – buffjape

答えて

3

あなたは(名前の競合)をフォローアップするために、そうすることができます。その理由は、C++標準ライブラリにはC標準ライブラリの内容のためのC++ヘッダーが含まれており、標準ではこれらを明示的にグローバル名前空間に指定することができます(義務的にそれらを::stdに提供するだけでなく)。

さらに、C標準のAnnex D [depr]に基づいて、C標準ライブラリヘッダー(<:::.h>バージョン)もC++標準ライブラリの一部です(推奨されなくなりましたが)。これは[res.on.headers]/1がC++ヘッダにそれらを含めることを意味します。

4

C++標準のD.3 C standard library headersセクションは、26 C標準ヘッダーをC++の一部にします。したがって、それらはC++の一部です。また、他の多くのCヘッダーは、言語の共有サブセットに準拠しています(おそらく#ifdefによっていくつかのものが出てきます)、有効なCヘッダーとC++ヘッダーの両方になります。

関連する問題