問題タブ [ifndef]
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++ - ガードと #ifndef #define 前処理ステートメントを含める
私が次のことをした場合:
dConst.hpp
genPower.hpp
ジェネレーター配列定数を使用するすべてのコードでリンカー エラーが発生します。
#include "dConst.hpp"
ただし、コードブロックで切り替えると:
できます...
の力を悪用してい#ifndef
ませんか?
ios - テストターゲットでのユーザー定義のビルド設定?
単体テストに次のコードがあります。
SERVER_TEST は、テスト ターゲットのユーザー定義設定のビルド設定で定義されています。
テストを実行すると、#ifndef SERVER_TEST は常に True を返します。理由はありますか?
ありがとう?
c++ - なぜ「すでに定義されている」のですか?
ここでヒントを教えてください:
私はこれを2回含めて取得しています:
LNK2005 - .obj (MSVS13) で既に定義されているプラットフォーム。
ご想像のとおり、Platform を 1 回だけ定義するという考え方でした。なぜ失敗するのです#ifndef
か?#define
これを修正するにはどうすればよいですか?
c++ - プラグマ ワンスを使用しているにもかかわらず、C++ エラー C2535
コードを実行すると、奇妙な C2535 エラーが発生します。これは、3 つの主要なクラスで構成されます (以下に要約)。それらの間にはいくつかの循環依存関係がありますが、#pragma once
マクロが先行しているため、複数回作成することはできません。次の行でエラーが発生しています。
それが言うところ:
エラー C2535: CVertex::CVertex(void): メンバー関数は既に定義または宣言されています
これは意味がありません。ガードを使用しているので、一度だけ宣言する必要があります! ガードも#pragma once
試してみましたが、違いはありません。ifndef
これがコードの要約です(重要な部分)
これは私の2番目のファイルです:
私の3番目のファイル:
c - 別の .h ファイルをインクルードすると、構造体のみが表示され、関数は表示されません
簡単にするために、次のような Page.h ファイルがあるとしましょう...
Page.c が printPage() を定義し、...
そして、上記の構造体/関数を使用する別の .c/.h ペアのファイルがあります。
Test.h で私は...
、そして私のTest.cは持っています
この時点で Page 構造体を使用できますが、printPage() を使用しようとすると、コンパイルしようとすると「'printPage()' への未定義の参照」エラーが発生します。
では、なぜ私のインクルードは構造体に対しては機能するのに、関数に対しては機能しないのでしょうか? 違いがある場合、私の gcc は gcc(SUSE Linux) 4.6.2 です。
c++ - C++ #ifndef トークン #define トークン
次のようなプリプロセッサ コードを見たことがある場合がいくつかあります。
私には、この状況では(それ自体以外のアイテム(まだ答えている人のためのガードを含む)をラップするときに使用することを認識しています)、定義する前に TOKEN がすでに定義されているかどうかを確認するのは冗長ですそれ。チェックなしで #define するだけの場合、結果は同じです。
これには共通の理由がありますか?コンパイル時間?将来の追加のためにブロックを予約しますか?
ありがとう。
c++ - #ifndef クラス名以外の名前を使用する理由
クラス宣言は通常次のようになります。
私の質問は、新しい識別子を再定義する代わりにクラス名を使用しない理由です。
識別子の競合 (同じ識別子が 2 回表示される可能性がある) または名前空間の使用 (std::array のような完全な識別子が #ifndef ディレクティブで使用される可能性があるかどうかはわかりません) に関連するものがあると思います。
もっと丁寧な説明があれば最高です。
また、名前空間を使用する場合、2 番目のテストを使用することは可能ですか?
c - プリプロセッサは HEADER_H を header.h に変換することをどのように認識していますか?
この質問によると、それをどのように書くことができるかにはある程度の柔軟性があるようです--
また:
など 決まったものではありません。
しかし、そもそもアンダースコアを使用する理由がまったくわかりません。なぜ私はただ書くことができないのですか:
それの何がいけないの?あらゆる場所にアンダースコアを配置し、すべてを大文字にするのはなぜですか? プリプロセッサはアンダースコアで何をしますか?