組み込み系のプログラムを現在勉強しています。
#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
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ファイル...
-
C言語をコンパイルするとコンピ...
-
実行後にコンパイルに失敗しま...
-
ヘッダーファイル『windows.h』...
-
math.hに含まれる関数が使えない
-
[COBOL] ソースの復帰
-
MVSマシンで0C7でABENDしたので...
-
printf()関数の括弧を二重にし...
-
「逆コンパイル」ってできるん...
-
同じEXE・同じファイルで解析結...
-
<math.h>ヘッダを入力している...
-
ビープ音が鳴りません・・・
-
Cのソースを毎回コンパイルし...
-
lhafileをインストールしたい
-
自作DLLの中身を暗号化
-
Verilog_HDLでのdefineとifdef
-
#defineとconstについて
-
C#で char型とstring型の比較で...
-
gccでc++プログラムをコンパイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
共有ライブラリの内容確認について
-
シリアル通信の受信待ちについて
-
C#で char型とstring型の比較で...
-
64ビットのlinuxで32ビットメモ...
-
Verilog_HDLでのdefineとifdef
-
math.hに含まれる関数が使えない
-
自作DLLの中身を暗号化
-
C言語で作ったらWindowsでもMac...
-
実行後にコンパイルに失敗しま...
-
lhafileをインストールしたい
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
すべてのリビルド: 0 正常、 0 ...
-
gcc バージョン違いによるコン...
-
Cのコンパイルでコメントアウト...
-
CLRアプリと通常のアプリとの違い
-
「インクルードファイル 'pthre...
-
MVSマシンで0C7でABENDしたので...
おすすめ情報