• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:#ifdef の使い方)

#ifdefの使い方について

このQ&Aのポイント
  • 組み込み系のプログラムを勉強中です。今回は#ifdefについて質問です。コード例を使って説明します。
  • #ifdefディレクティブは、条件付きコンパイルを行うためのものです。Aが定義されていれば(1)が実行され、Aが定義されていない場合は#elseに移ります。
  • さらに、Bが定義されている場合は(2)を実行します。#endifは条件分岐の終了を示します。より分かりやすいコードを書くために、コードの意味に応じた条件付きコンパイルを活用しましょう。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

言葉の使い方に若干の不安を覚えます。 > Aが定義されていれば(1)が実行しコンパイル終了(#endif)。 「Aが定義されていれば(1)の部分のみがコンパイルされる」と言うべきでしょう。コンパイル時には(1)を実行しませんし、#endifでコンパイルが終了するわけでもありません。 > Bが定義されている場合は #ifdef Bではなく#if Bなので、「Bが真であれば」が正しいです。 > またこうした方が分かりやすいなど 質問文にあるコードなら、下記のようにすると少し見やすくなります。 #ifdef A ---- (1) Y = Z; #elif B ---- (2) X = Z; #endif

anubs
質問者

お礼

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

その他の回答 (1)

回答No.2

#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) と書けます。

anubs
質問者

お礼

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

関連するQ&A