web-dev-qa-db-ja.com

#ifプリプロセッサディレクティブをC ++でネストできますか?

C++のプリプロセッサディレクティブについて質問があります。

例えば:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

このように使用できますか。C++コンパイラはifndefendifを正しい方法で一致させることができますか?

75
user707549

はい、できます。 #endifステートメントは、対応する#ifがなかった以前の#ifdef#ifndefまたは#endifなどに一致します。

例えば.

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|
101
Armen Tsirunyan

はい、#if/#endifブロックをネストできます。一部のCコーディングスタイルでは、次のように記述します。

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

ネストのレベルを示すためにスペースを使用します。

43
Fred Foo

コードでは、#undef QUESTIONを使用しない限り、#ifndef QUESTIONセクションは破棄されます。

がんばろう!

0
bert-jan