web-dev-qa-db-ja.com

header(.h)の代わりに.cppを含める

標準ヘッダーファイル(.h)の代わりに.cppファイルを含める場合があります。次に例を示します。

#include "example.cpp"

の代わりに

#include "example.h"

それは動作するようですが、これは安全ですか、それとも回避すべきですか?

コンパイル時間はどうですか?

21
sysop

それは怠惰なコーディングです。ヘッダーファイルを使用します。はい、コンパイル時間を増やすことができますが、コードのチャンクを簡単に再実装できることを意味します。さらに良いことに、別の開発者がいつでもできます。ヘッダーファイルは、C/C++コードで実行します。破棄するか無視するのは悪い考えです。

20
zellio

私はKerrek SBに同意します。

私はこれを一度だけしました。私は、8ビットイメージ用と12ビットイメージ用に別々に構築する必要がある、広く使用されている優れた圧縮ライブラリを構築していました。これをビルドシステムに合わせるために思いつくことができる最もクリーンな方法は、2つのマスター.cppファイルを作成することです(1つは8ビットビルド用に#definesを設定し、もう1つは12ビットビルド用です)。マスター.cppファイルは、圧縮ライブラリのソースファイルを#includeしました。

ルールを十分に理解し、その理由とケースに適用されない理由を理解している場合は、一般的なルールに従わないことも問題ありません。 (しかし、それらのケースはまれであるべきです。)

7
Dan K

_#include "impl.cpp"_の正当な用途があります。

  1. static/etc変数へのアクセスのテスト

  2. c ++テンプレートメカニズムが不十分であることが判明した場合、これらのようなアドホックテンプレート(まれ)

    #define MACRO (...)

    _#include "impl.cpp" // uses MACRO_

_#include "impl.cpp"_は、後で一緒にリンクされる別々のコンパイル単位に同じファイルが含まれていると安全でない場合があることに注意してください。

3
Dima Tisnek

私は以前にそれを使用したことがあり、問題はありませんでしたが、これが安全であることを保証することはできません。ときどきこれが唯一のオプションだったので使用しました。それ以外の場合は.hファイルを使用します。

1
Joqus