![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
組み込み系のプログラムを現在勉強しています。
#ifdefについて質問させて頂きます。
下記コードの場合
#ifdef A
---- (1) Y = Z;
#else
-----#if B
------- (2) X = Z;
----#endif
#endif
("-"は空白と思ってください。)
この場合、Aが定義されていれば(1)が実行しコンパイル終了(#endif)。
Aが定義されていない場合、#else に行き、Bが定義されている場合は
(2)を実行してコンパイル終了(#endif)という理解であっていますか?
またこうした方が分かりやすいなど、アドバイス頂けると幸いです。
ご返答よろしくお願いします。
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
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?e8efa67)
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)
と書けます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 3 2022/06/23 16:34
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
ビープ音が鳴りません・・・
-
すべてのリビルド: 0 正常、 0 ...
-
c言語です コンパイルした時に...
-
gccを使ってのリンク時のライブ...
-
math.hに含まれる関数が使えない
-
YaccとLex
-
gcc コンパイル killed
-
fatal error LNK1112
-
HEWの警告のことについて
-
[COBOL] ソースの復帰
-
obj オブジェクトファイルがで...
-
#defineとconstについて
-
ubuntuで作ったアプリを他のLin...
-
実行後にコンパイルに失敗しま...
-
C言語で作ったらWindowsでもMac...
-
AdobeReader8.0の機能を使って...
-
64ビットのlinuxで32ビットメモ...
-
#If True Then の # って何??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
math.hに含まれる関数が使えない
-
実行後にコンパイルに失敗しま...
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
共有ライブラリの内容確認について
-
C言語をコンパイルするとコンピ...
-
すべてのリビルド: 0 正常、 0 ...
-
Verilog_HDLでのdefineとifdef
-
C#で char型とstring型の比較で...
-
64ビットのlinuxで32ビットメモ...
-
gcc コンパイル killed
-
#If True Then の # って何??
-
プレコンパイルの意味を教えて...
-
[COBOL] ソースの復帰
-
<math.h>ヘッダを入力している...
-
C言語で作ったらWindowsでもMac...
-
ヘッダーファイル『windows.h』...
-
define文のパラメータを実行時...
おすすめ情報