アプリ版:「スタンプのみでお礼する」機能のリリースについて

プリプロセッサの使い方での確認なのですが、

#define A

#if defined(A)
処理(1)
#else
  処理(2)
#endif

と書いた場合、Aに何も定義していないので、処理(2)が実行されると言う理解で良いですか?

また、

#ifdef A

#else

#endif

と書いた場合と何が違うのですか?

A 回答 (5件)

この辺はコンパイラの仕様に依存する話ではないでようか?

    • good
    • 0

>Aに何も定義していないので、処理(2)が実行されると言う理解で良いですか?


違います。
#define Aで定義されています。

#ifdefでも結果としては同じです。
    • good
    • 0

まず


#ifdef A

#if defined A
と等価.

で defined は「#define されているかどうか」の判定であって「何に定義されているのか」は無関係.
    • good
    • 1

>と書いた場合と何が違うのですか?



質問文の場合、何も違いがありません。

じゃあなんで #if definedなんて書き方があるかというと、
「defined マクロ」が真理値であるということと、
#ifは真理値を評価するということがヒントになります。

たとえば、

#if defined A && defined B
process 1
#else
process 2
#endif

のように、複数のマクロのdefineを判定するときに利用できます。
$ cpp test.c -DA -DB

$ cpp test.c -DA
とかやってみれば、違いが分かるでしょう。

もちろん、
#if defined A && B == 2
みたいな使い方もできます。

プラットフォームごとに処理の記述を分けたいときなどに使われます。
    • good
    • 0

#ifdef しかないと #else との相性が悪いってのもある>#4.



#if
#else
#ifdef
#endif
#endif
よりも
#if
#elif defined
#endif
の方がきれいだし.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!