問題タブ [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.

0 投票する
1 に答える
821 参照

c++ - #import は C++11 標準の一部ですか?

クロスプラットフォームの C++11 ライブラリで#import(インクルード ガードを使用する代わりに)使用しても安全かどうかを確認しようとしていますか?#include

私が SO や他の場所で見つけた記事は、#import が C++11 標準に含まれるように提案されたことを示しているようですが、2012 年頃の回答から判断すると、まだ Microsoft および GCC 固有の拡張機能であり、インポートはサポートされていないようです。受け入れられた標準。

0 投票する
1 に答える
135 参照

c++ - ヘッダー ガードの問題 - 生きたまま飲み込まれる

私は完全に機知に富んでいます。依存関係の問題がどのように発生するのかわかりません。数え切れないほどの投稿やブログを読み、コードを何度も作り直したので、何がほとんど機能し、何が機能しなかったかさえ思い出せません。再定義エラーだけでなく、クラスが定義されていないエラーも頻繁に発生します。ヘッダーガードを作り直し、いくつかのエラーを削除して、他のエラーを見つけました。私はどういうわけかすべてを1つのエラーに落とし込みましたが、それを修正しようとしても壊れてしまいました。

問題を解くのを手伝ってくれませんか?

card.cpp

card.h

conception.h -- これは、すべてが派生する「超クラス」です。

概念.cpp

game.cpp -- このコードの時点では、これは不完全なクラスです

game.h

リスト.cpp

list.h

player.cpp

player.h

0 投票する
4 に答える
143 参照

c++ - C++ヘッダーはオブジェクトと使用法を保護しますか?

次のように、オブジェクトの周りにヘッダー ガードを配置することに慣れています。

しかし、私は彼らも行うコードを与えられています:

すべてのインクルード。一応、こちらの方がいいです。なんで?これはオブジェクトの周りの警備員と重複していますか?

0 投票する
3 に答える
21339 参照

c++ - #include しなくても std::max と std::min を使用できるのはなぜですか?

私の知る限り、minおよびmax関数は で定義されてい<algorithm>ます。

プリプロセッサに含めるように指示しなかった場合<algorithm>、コードがまだ機能するのはなぜですか?

0 投票する
1 に答える
685 参照

include - Nim で失敗したインポートから回復するにはどうすればよいですか?

Nimでは、次のコードを記述して外部モジュールをインポートできます。

これは、モジュールがある限り問題なく機能しますが、コードをダウンロードする可能性があり、モジュールがインストールされていない場合、コンパイルはあまりユーザーフレンドリーではないメッセージで失敗します。

例外と同様にキャッチして、ステートメントと同様のコードの代替ブランチを実行importできるようにラップする方法はありますか? のようなマクロまたは次のように使用できるものを見つけたいと思っていました。whenimportable

実際、単純なエラー メッセージではなく、いくつかのモジュールをオプションにしたいと考えています。これにより、おそらく機能が制限された状態でコンパイルが続行されます。これは可能ですか?

解決策の編集:ここでの回答に基づいて、問題を解決する方法を私のバージョンに示します。最初moduleCheckerに、次のソースを含むバイナリが必要です。

次に、このコマンドを使用できるようにすると、次のマクロを使用できます。

staticWrite現在のバージョンにはコンパイル時にファイルを生成するプロセスがないため、外部コンパイルだけでなく、チェック用の一時ファイルを生成する別のプロセスも生成する必要があるのは非常に残念です。

0 投票する
5 に答える
2286 参照

c - 複数インクルードの最適化

複数インクルードの最適化が gcc でどのように機能するかを理解しようとしています。最近、標準ヘッダー ファイルのガードを含む多くのコードを読んでいます。

そして、この構造に利点があるかどうかを調べようとしています。

これをもう少しよく理解するために私が書いた例を次に示します。

header1.h

header2.h

hdr.c

と の両方が同じインクルード ガードheader1.hを使用していることに注意してください。header2.h予想どおり、このプログラムAは header1.h で定義された値を出力します。header2.h は、同じインクルード ガードを使用するためスキップされます。

これが私が理解しようとしているものです

  • header2.h を解析するときに、プリプロセッサがこのファイルをスキップするのはどの時点ですか? 私の理解では、このファイルは 1 行目のディレクティブの直後にスキップされます#if。つまり、一致するのを待つ必要はありません#endif。これは正しいです?
  • これがどのように機能するかを示すために、上記の例に何を追加できますか?

編集:答えてくれてありがとう。これは今、より理にかなっています。フォローアップの質問です。この投稿の最初の行にリンクされているページには、次のテキストがあります

プリプロセッサはそのようなヘッダー ファイルを認識するため、ヘッダー ファイルが後続の #include ディレクティブに表示され、FOO が定義されている場合、それは無視され、ファイルを前処理したり、再度開いたりすることはありません。これは、複数インクルードの最適化と呼ばれます。

私がこれを正しく理解している場合、これは、特定のコンパイル プロセスに複数回含まれていても、ヘッダー ファイルは 1 回だけ読み取られることを意味します。そのため、アプリケーション コードまたはヘッダー ファイルにインクルード ガードを追加しても、何のメリットもありません。