質問

かばの違いはこれらのディレクティブ?

#ifdef FOO

#if defined FOO

#if defined(FOO)

私も使っているCCSコンパイラが、私はその他の C コンパイラです。

役に立ちましたか?

解決

から僕が見た主な使用のための #if defined はいチェックのための複数のマクロ定義する。その他、単一のマクロ定義条件分岐には、同一と分かっています。

#include <stdio.h>
int main()
{
#if defined(FOO) && defined(BAR)
    printf("foobar!\n");
#else
    printf("nothing.\n");
#endif
    return 0;
}
$ tcc -DFOO -run a.c 
nothing.
$ tcc -DBAR -run a.c 
nothing.
$ tcc -DFOO -DBAR -run a.c 
foobar!

また、上記のプログラム統美 gcc -Wall -ansi a.c うことを示唆 #if defined が正しいANSI Cまた、 このANSI C概要から1987年 リスト #if defined として、新しく設定された行動のためのプリプロセッサの下でANSI規格は-" すべ バスタブの下から水漏ANSI準拠のコンパイラまでご利用いただきます。

ばんを使用 #if defined, いい

#ifdef FOO
#ifdef BAR
    printf("foobar!\n");
#endif /* BAR */
#endif /* FOO */

また、 のRedhatマニュアルは、Cプリプロセッサ という

#if defined MACRO 精密に相当 #ifdef MACRO.

他のヒント

全3形態を正確に同等の有効な、C99ます。一般的に #ifdef が優先ですのでより短いときは、他の二つの形態がない場合がありますが使用したいのですが、その他の形態:

  • 場合は試験のための定義は複数のシンボル、またはより複雑な表現は:

    #if defined(ONE_THING) && define(ANOTHER_THING) && (3 < 4)
    ...
    #endif
    
  • が複数ある場合には条項のかにより使いやすく #elif defined(...) 以上 #else, #ifdef:

    #if defined(ONE_THING)
    ...
    #elif defined(ANOTHER_THING)
    ...
    #elif defined(THIRD_THING)
    ...
    #else
    ...
    #endif
    

の利用に括弧付 defined オプションうを使用して追加ます。

#ifdef#定義されている場合 と思ってい括弧は分からないので、基本的に彼らは同じです。

からTurbo Cっ用を見る #ifdef#定義されている場合

もともとそこだけ#ifdefだったが、#ifをスーパーセットするdefined()ために#ifを持っているnecessayだっ沿っ#ifdefが来たときます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top