2017-10-25 5 views
0

ソースファイルがビルド中に複数回処理されるとエラーをスローする方法はありますか?私はあなたが#pragma once#ifndefタイプのものを使うことができることを知っていますが、これは1回のコンパイルユニットに1度だけ含まれないようにしています。 Visual Studioのソリューション内に複数のプロジェクトがあるビルド全体で一度だけコンパイル/コンパイルされていることを確認します。ファイルがビルドで一度だけ処理されるようにする方法

通常の.cppファイルは、通常は一度しか処理されません。しかし、他のファイル#include d .cppファイルの場合は、複数回処理することができます(これは一般的ではありませんが、状況をよく説明しています)。だから、私は偶発的にファイルを複数回インクルードするのを防ぐようにしています。

+2

_ "他のファイルには.cppファイル"が含まれていれば、それは 'cpp'ファイルなので非常に間違っています。ヘッダー(例: 'hpp')ファイルを意味しましたか? –

+1

代替ソリューション:誤って '.cpp'ファイルが存在する場所をすべて探して修正します。 – user0042

+0

@underscore_d必ずしも間違っているわけではありません(このエントリの最後を参照してください):https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl – mentics

答えて

0

このように、私は誤ってファイルを複数回インクルードしないようにしています。

少なくとも、リンカーはODRルール違反に関するエラーメッセージを表示しますが、心配しないでください。

他のファイルがその.cppファイルを#includeした場合でも、それを処理することができ、複数回

はい、それが処理される複数回提供する複数の定義が一緒にリンクすることができません翻訳単位に広がりますもう

+0

私はそれをテストしたが、エラーは発生しません。今...これは、リンカーが気にしないので、ファイルを何度も処理することを心配するべきではないことを意味するかもしれませんが、私はまだ知りたいと思います。 – mentics

+0

@taotreeおそらくリンカが文句を言わない場合は[MCVE]を提供しますか? – user0042

+0

例:空のファイル。それは意味がありませんが、正確です。答え: "リンカは重要であれば教えてくれます"は役に立ちますが、直接答えはしません。答えが「いいえ、あなたはできません」とすればそれはうまくいく、私はただ知りたい。 – mentics

0

どうすればよいですか?カウンタマクロ?プロジェクト全体の動作がわからない

#if __COUNTER__ > 0 
#error I was there already 
#endif 
関連する問題