- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:#ifdef の使い方)
#ifdefの使い方について
このQ&Aのポイント
- 組み込み系のプログラムを勉強中です。今回は#ifdefについて質問です。コード例を使って説明します。
- #ifdefディレクティブは、条件付きコンパイルを行うためのものです。Aが定義されていれば(1)が実行され、Aが定義されていない場合は#elseに移ります。
- さらに、Bが定義されている場合は(2)を実行します。#endifは条件分岐の終了を示します。より分かりやすいコードを書くために、コードの意味に応じた条件付きコンパイルを活用しましょう。
- みんなの回答 (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
その他の回答 (1)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
回答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) と書けます。
質問者
お礼
ご返答ありがとうございます。 アドバイスありがとうございます。 参考にさせていただきます。
お礼
ご返答ありがとうございます。 勉強不足で恥ずかしい限りです。 改めて、ご返答ありがとうございました。