アプリ版:「スタンプのみでお礼する」機能のリリースについて

組み込み系のプログラムを現在勉強しています。
#ifdefについて質問させて頂きます。

下記コードの場合

#ifdef A
---- (1) Y = Z;
#else
-----#if B
------- (2) X = Z;
----#endif
#endif

("-"は空白と思ってください。)

この場合、Aが定義されていれば(1)が実行しコンパイル終了(#endif)。
Aが定義されていない場合、#else に行き、Bが定義されている場合は
(2)を実行してコンパイル終了(#endif)という理解であっていますか?

またこうした方が分かりやすいなど、アドバイス頂けると幸いです。
ご返答よろしくお願いします。

A 回答 (2件)

言葉の使い方に若干の不安を覚えます。



> Aが定義されていれば(1)が実行しコンパイル終了(#endif)。

「Aが定義されていれば(1)の部分のみがコンパイルされる」と言うべきでしょう。コンパイル時には(1)を実行しませんし、#endifでコンパイルが終了するわけでもありません。

> Bが定義されている場合は

#ifdef Bではなく#if Bなので、「Bが真であれば」が正しいです。

> またこうした方が分かりやすいなど

質問文にあるコードなら、下記のようにすると少し見やすくなります。

#ifdef A
---- (1) Y = Z;
#elif B
---- (2) X = Z;
#endif
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
勉強不足で恥ずかしい限りです。

改めて、ご返答ありがとうございました。

お礼日時:2012/01/26 11:24

#if B については、既に回答があるとおりです。


この場合、

#define B 0
などとしてあれば、条件は満たしませんし、
#define B 1
なら条件を満たします。

あと、最近の処理系では、defined が使えますので、

#if defined(A)
---- (1) Y = Z;
#elif B
----- (2) X = Z;
#endif

もおすすめです。

この場合だと、
#ifdef A

#if defined(A)
も余り変わりませんが、(むしろ文字数が多い)

#if defined(A) && defined(B)
のように、複数の条件が重なったときに、同じようにかけるというのがメリットです。
#ifndef A の場合は、
#if !defined(A)
と書けます。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

アドバイスありがとうございます。
参考にさせていただきます。

お礼日時:2012/01/26 11:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!