C言語の基礎
#define DEBUG 0
#ifdef DEBUG
printf("A\n");
#endif
#if DEBUG
printf("B\n");
#endif上のコードを main 関数の中に書いて実行したときの出力として、正しいものはどれか。
- AA だけが表示される
- B何も表示されない
- CA と B が表示される
答えと解説を見る
正解:A. A だけが表示される
#ifdef DEBUG は、DEBUG というマクロが定義されているかどうかだけを調べ、値は見ません。DEBUG は値0で定義されているので条件は真になり、A を表示する文がコンパイルされます。#if DEBUG は値を調べ、0なので偽になり、B を表示する文は取り除かれます。デバッグ用の処理を切り替えるときは、#ifdef と #if のどちらで判定するかをそろえておかないと、このような食い違いが起こります。
- A. 正しい。#ifdef は定義されているかどうかだけを、#if は値を調べます。
- B. #ifdef は、値が0でも定義されていれば真になります。
- C. #if DEBUG は DEBUG の値が0なので偽になり、B の文は取り除かれます。