の違いは何ですかこれらのコンパイラディレクティブ?
-
19-09-2019 - |
質問
かばの違いはこれらのディレクティブ?
#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
が来たときます。