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

0 投票する
2 に答える
511 参照

c++ - ガードと #ifndef #define 前処理ステートメントを含める

私が次のことをした場合:

dConst.hpp

genPower.hpp

ジェネレーター配列定数を使用するすべてのコードでリンカー エラーが発生します。

#include "dConst.hpp"ただし、コードブロックで切り替えると:

できます...

の力を悪用してい#ifndefませんか?

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

ios - テストターゲットでのユーザー定義のビルド設定?

単体テストに次のコードがあります。

SERVER_TEST は、テスト ターゲットのユーザー定義設定のビルド設定で定義されています。

テストを実行すると、#ifndef SERVER_TEST は常に True を返します。理由はありますか?

ありがとう?

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

c++ - なぜ「すでに定義されている」のですか?

ここでヒントを教えてください:

私はこれを2回含めて取得しています:

LNK2005 - .obj (MSVS13) で既に定義されているプラ​​ットフォーム。

ご想像のとおり、Platform を 1 回だけ定義するという考え方でした。なぜ失敗するのです#ifndefか?#defineこれを修正するにはどうすればよいですか?

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

c++ - プラグマ ワンスを使用しているにもかかわらず、C++ エラー C2535

コードを実行すると、奇妙な C2535 エラーが発生します。これは、3 つの主要なクラスで構成されます (以下に要約)。それらの間にはいくつかの循環依存関係がありますが、#pragma onceマクロが先行しているため、複数回作成することはできません。次の行でエラーが発生しています。

それが言うところ:

エラー C2535: CVertex::CVertex(void): メンバー関数は既に定義または宣言されています

これは意味がありません。ガードを使用しているので、一度だけ宣言する必要があります! ガードも#pragma once試してみましたが、違いはありません。ifndef

これがコードの要約です(重要な部分)

これは私の2番目のファイルです:

私の3番目のファイル:

0 投票する
2 に答える
85 参照

c - 別の .h ファイルをインクルードすると、構造体のみが表示され、関数は表示されません

簡単にするために、次のような Page.h ファイルがあるとしましょう...

Page.c が printPage() を定義し、...

そして、上記の構造体/関数を使用する別の .c/.h ペアのファイルがあります。

Test.h で私は...

、そして私のTest.cは持っています

この時点で Page 構造体を使用できますが、printPage() を使用しようとすると、コンパイルしようとすると「'printPage()' への未定義の参照」エラーが発生します。

では、なぜ私のインクルードは構造体に対しては機能するのに、関数に対しては機能しないのでしょうか? 違いがある場合、私の gcc は gcc(SUSE Linux) 4.6.2 です。

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

c++ - C++ #ifndef トークン #define トークン

次のようなプリプロセッサ コードを見たことがある場合がいくつかあります。

私には、この状況では(それ自体以外のアイテム(まだ答えている人のためのガードを含む)をラップするときに使用することを認識しています)、定義する前に TOKEN がすでに定義されているかどうかを確認するのは冗長ですそれ。チェックなしで #define するだけの場合、結果は同じです。

これには共通の理由がありますか?コンパイル時間?将来の追加のためにブロックを予約しますか?

ありがとう。

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

c++ - #ifndef クラス名以外の名前を使用する理由

クラス宣言は通常次のようになります。

私の質問は、新しい識別子を再定義する代わりにクラス名を使用しない理由です。

識別子の競合 (同じ識別子が 2 回表示される可能性がある) または名前空間の使用 (std::array のような完全な識別子が #ifndef ディレクティブで使用される可能性があるかどうかはわかりません) に関連するものがあると思います。

もっと丁寧な説明があれば最高です。

また、名前空間を使用する場合、2 番目のテストを使用することは可能ですか?

0 投票する
2 に答える
296 参照

c - プリプロセッサは HEADER_H を header.h に変換することをどのように認識していますか?

この質問によると、それをどのように書くことができるかにはある程度の柔軟性があるようです--

また:

など 決まったものではありません。

しかし、そもそもアンダースコアを使用する理由がまったくわかりません。なぜ私はただ書くことができないのですか:

それの何がいけないの?あらゆる場所にアンダースコアを配置し、すべてを大文字にするのはなぜですか? プリプロセッサはアンダースコアで何をしますか?