問題タブ [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.
c++ - C および C++ で、通常、各 .h ファイルが #ifndef #define #endif ディレクティブで囲まれているのはなぜですか?
各 .h ファイルが #ifndef #define #endif で始まるのはなぜですか? これらのディレクティブがなくてもプログラムをコンパイルできます。
c - 変数の定義はヘッダーファイルに含める必要がありますか?
Cとコンパイルプロセス に関する私の非常に基本的な知識は最近錆びています。次の質問に対する答えを見つけようとしていましたが、コンパイル、リンク、および前処理フェーズの基本を接続できませんでした。グーグルでのクイック検索もあまり役に立たなかった。それで、私は知識の究極の源に来ることに決めました:)
私は知っています:変数は.hファイルで定義されるべきではありません。そこで宣言しても大丈夫です。
理由:ヘッダーファイルが複数の場所からインクルードされる可能性があるため、変数を複数回再定義します(リンカーはエラーを出します)。
考えられる回避策:ヘッダーファイルでヘッダーガードを使用し、その中で変数を定義します。
それは本当に解決策ですか:いいえ。ヘッダーガードは前処理フェーズ用であるためです。これは、この部分がすでに含まれていることをコンパイラーに通知し、再度含まないようにすることです。しかし、複数定義のエラーは、コンパイルのかなり後にリンカー部分で発生します。
このすべてが、前処理とリンクがどのように機能するかについて私を混乱させました。ヘッダーガードシンボルが定義されている場合、前処理にはコードが含まれないと思いました。その場合、変数問題の複数の定義も解決されるべきではありませんか?
これらの前処理ディレクティブにより、コンパイルプロセスがヘッダーガードの下でシンボルを再定義する必要がなくなりますが、リンカーはシンボルの複数の定義を取得します。
c++ - 冗長なインクルードガードが必要ですか?
Codegear RAD Studio 2009では「冗長インクルードガード」が必要ですか?コンパイラはそれ自体でこれを処理するのに十分賢いですか?
たとえば、foo.hに次の「includeguard」があるとします。
そして、use_foo.hの次の「冗長インクルードガード」:
さらに、コンパイラが十分に賢くない場合、ソースファイルに含まれている場合は「冗長インクルードガード」が必要です。例:use_foo.cpp
。?
javascript - jQueryが再定義されないようにする良い方法はありますか?
jQueryに使用していたプラグイン(この場合はjFeed)が機能していない場合にデバッグに時間がかかる問題が発生しました。問題は、 AmazonAssociatesの製品プレビューも使用したために発生しました。製品プレビューコードには、jQueryの別のコピーを含む、document.write()を介した他の多数のJSファイルが含まれることになります。製品プレビューコードがjFeedスクリプトの下に表示されたため、jQueryはgetFeed関数なしで再定義されました。
jQueryのような特定のオブジェクトがページ上で一度だけ定義されるようにするためのベストプラクティスはありますか?C / C ++で#ifndefのようなものを考えていますが、jQueryを動的にプルするコードを再度記述しなかった場合、どのように機能するかわかりません。
c++ - C++ のテンプレート クラスとインクルード ガード
テンプレート クラスの周りにガードを含めることは賢明ですか?
テンプレート クラスは、異なる実装で参照するたびに再解析されるはずではありませんか?
NB Visual C++ 2008 では、この 2 つを組み合わせてもエラーは発生しません...
c++ - 条件付きコンパイル (ifndef) に関する簡単な質問
これはおそらく非常にばかげた質問ですが、確認する必要があります。たとえば、ヘッダーファイルでクラス宣言が与えられました。
メソッド定義を同じファイルに書き込む必要がありましたが、これを行いました。私の質問は、「#endif」がクラス宣言の直後にあるのか、それともファイルの最後にあるのかということです。クラスメソッド定義?.
c++ - C++ヘッダーガードの問題
多くの.hと.cppを含む小さなC++フレームワークを作成しています。
次のようなすべての.hファイルを含む一般的なインクルードを作成しました。
各.hヘッダーは、次のようなインクルードガードで保護されています
問題は、などのすべてのsub .h内に「framework.h」を含めることができるようにしたいのですが、多くのコンパイラエラーが発生します。
代わりに、各サブヘッダーに実際のヘッダーファイルを使用し、フレームワークを使用するものにframework.hを使用すると、正常に機能します。
すべてのサブ.h内にメインヘッダーを含めたいので、毎回すべての依存関係を含める必要はありません。
ありがとう :)
c++ - ヘッダーガードの目的
C ++では、C++プログラムのヘッダーガードの目的は何ですか。
ネットから私はそれがファイルを何度も含めるのを防ぐためのものであることがわかりましたが、ヘッダーガードはこれをどのように保証しますか?
php - あるクラスを別のクラスの悪いプログラミングから保護しますか?
PHPでファイルをインクルードしようとする方法はありますが、ファイルにエラーが含まれている場合、コンパイルを停止してそのファイルをインクルードからスキップするだけですか?
c++ - C++ では、"_MOVE_H" の何が特別なのですか?
このようなC++ファイルがあります
そして驚いたことに、#ifndef
との間のすべてのコード#endif
はコンパイラによって単純に無視され (_MOVE_H
他の場所で定義していないことを誓います)、定義の欠落に関するあらゆる種類のエラーが発生します。私は何か間違ったことをしたと思っていましたが、別のキーを使用しようとすると ( のよう_MOVE_Ha
に、すべてが正常に戻りまし_MOVE_H
た。C++ で何か特別なことを意味しますか?
問題があれば、Ubuntu 10.04、GCC 4.4.3 を実行しています。
ありがとう、