問題タブ [include-guards]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
customization - Eclipse CDT の include-guard のカスタマイズ
${include_guard_symbol}
Eclipse/CDT で新しい C++ クラスを作成して自動生成されたインクルード ガードが必要ですが、属性を変更する方法が見つかりません。
私の願いは、次のような名前空間プレフィックスを持つインクルード ガードです。
しかし、これを使用する#ifndef ${namespace_name}_${include_guard_symbol}
と、次のようになります。
これどうやってするの?
c - C で独自のヘッダー ファイルを作成する
最初から最後まで簡単な例を使用して、C でヘッダー ファイルを作成する方法を誰でも説明できますか。
shell - C ++の「インクルードガード」に似たシェルスクリプトのメカニズムはありますか?
例を見てみましょう。私の main.sh では、a.sh と b.sh をソースにしたいと考えています。ただし、a.sh はすでに b.sh をソースしている可能性があります。したがって、b.sh のコードが 2 回実行されます。C++に「インクルードガード」に似たメカニズムはありますか?
c++ - どちらが先ですか?ヘッダー ガード、名前空間、インクルード
私はしばらくの間、このようなファイルを作成してきました: 順序は意味がありますか? または、名前空間と #includes を交換する必要があり、その理由.
c++ - ダブルインクルードソリューション?
C ++では、ダブルインクルードに問題があります。
ファイルstuffcollection.h
ファイルstage.h:
コンパイラエラー:
\Stuffcollection.h|(line were bool myfunc is declared)|error: 'Stage' has not been declared|
||=== Build finished: 1 errors, 0 warnings ===|
誰かがこれが起こる理由とそれを解決する方法を説明できますか?私はすでにインクルードガードとプラグマ一度プリプロセッサディレクティブを使用していますが、それは機能しません。
(stage.hから削除#include "Stuffcollection.h"
し、stage.cppでそれを使用しているそれぞれの行をコメントアウトすると、残りのコードは正常に機能します。Stuffcollectionをステージに含めると、突然機能しなくなります。)
PS:ステージはほんの一例です。私は他のほとんどすべてのファイルでもstuffcollectionを使用しており、この問題が発生するたびに使用しています。
編集:私は提案されたものに従いました、そして今問題はですinvalid use of incomplete type
、すなわち与えられた答えは循環依存の問題を解決しますが、私が扱っている問題を解決しません。私の問題は循環依存/不完全なタイプで続いています。
編集:両方とも解決しました。
c - ヘッダー/インクルードガードが機能しませんか?
何らかの理由で、ヘッダーガードを使用しているのに、ヘッダーファイル内に複数のコンテンツ宣言があります。私のサンプルコードは以下のとおりです。
main.c:
things.c:
things.h:
これをコンパイルしようとすると、GCCはsomething変数の定義が複数あると言います。ifndefはこれが起こらないことを確認する必要があるので、なぜそうなるのか混乱しています。
c++ - 無限のインクルードループ
重複の可能性:
Cヘッダーファイルのループ
元の質問:
次のエラーが発生する理由を理解するのにいつも問題がありました。
何か.h
somethingelse.h
なぜこれでエラーが発生するのですか?
1)SOMETHING_Hが定義されていません
2)SOMETHING_Hが定義され、somethingelse.hが含まれる
3)SOMETHINGELSE_Hが定義されておらず、定義され、something.hが含まれる
4)SOMETHING_Hが定義されています。#endifにジャンプします。これで終わりですか?
編集:
エラーはまったく発生しません。ただし、以下は行います。
何か.h
somethingelse.h
そして、それは論理的です。なぜなら、「somethingelse」がそのクラスのインスタンスを必要とするとき、クラス「something」はまだ定義されていないからです。
この問題は、前方定義によって解決されます。
何か.h
.cppに、「somethingelse.h」を含めて、クラスのインスタンスを作成できます。
c++ - C++#includeガード
解決済み
私が本当に助けてくれたのは、再定義されたエラーを発生させることなく、.cppファイルにヘッダーを#includeできることでした。
私はC++を初めて使用しますが、C#とJavaでプログラミングの経験があるため、C++に固有の基本的なものが不足している可能性があります。
問題は、何が問題なのかよくわからないことです。問題を説明するためにコードを貼り付けます。
GameEvents、Physics、GameObjectの3つのクラスがあります。それぞれにヘッダーがあります。GameEventsには、1つの物理学とGameObjectsのリストがあります。PhysicsにはGameObjectsのリストがあります。
私が達成しようとしているのは、GameObjectがPhysicsオブジェクトにアクセスまたは所有できるようにすることです。
GameObjectに単に「Physics.h」を#includeすると、「エラーC2111:'ClassXXX':'class'typeredifinition」が表示されます。そして、これが#include-guardsが役立つと思ったので、Physics.hにインクルードガードを追加しました。これは、2回インクルードしたいヘッダーだからです。
これはそれがどのように見えるかです
しかし、GameObject.hに「Physics.h」を#includeすると、次のようになります。
なぜ表示されているのかわからない問題が複数発生します。「Physics.h」を#includeしない場合、コードは正常に実行されます。
助けてくれてとても感謝しています。
c++ - コンパイル速度の向上には、ガードとプリコンパイル済みヘッダーが含まれます
大規模なプロジェクトのコンパイル時間を短縮したい。プライマリコンパイラはVisualStudio2010ですが、一部のコードはgccでコンパイルされます。現在、すべての.hファイルにガードと#pragmaが一度含まれていることを確認することを計画しています。これにより、VisualStudioとgccの両方でコンパイル速度が向上します。以前はstdafxにさらに多くのヘッダーを配置していましたが、これらのヘッダーの1つが変更された場合、プリコンパイル済みヘッダーを再コンパイルせずにcppをコンパイルすると、変更が有効にならないという欠点がありました。これはしばしば私たちを混乱させました。現在の計画では、すべての安定したヘッダーまたは制御できないヘッダーにプリコンパイル済みヘッダーを使用し(変更されません)、その他すべての場合は、コンパイル速度を上げるためにインクルードガードと#pragmaを1回使用します。このパスがうまく計画されていない理由はありますか?インクルードガード/#pragma1回とプリコンパイル済みヘッダーまたはその逆のコンパイル速度には利点がありますか?
c++ - Cガードを含む
初めてインクルード(インクルードガードを含む)のfile1.c
ときに実行されます。しかし今、別の人が同じものを含むとき、マクロはすでに定義されていますか、それはすべて同じ話であり、以前の定義はここに伝播されませんか?inc.h
#ifndef INC_H
#define INC_H
file2.c
inc.h
INC_H