0

#ifdefマクロを理解しようとしています。以下サンプルコード。

getval(int val)
{
  if(val==0) {
    #ifndef PKT
    #define PKT
    #endif
  }
}
main() {
getval(0);
#ifdef PKT
printf("Packet\n");
#endif
}

Packetに渡し1ても出力が得られますgetvalPKTが定義されていないときに出力が得られるのはなぜval=1ですか? ありがとう。

4

4 に答える 4

2

#define PKTプログラムの実行中ではなく、実際のコンパイルの前にプリプロセッサによって評価される部分。そのため、条件の対象外となりますif(val==0)

于 2013-07-23T07:55:16.250 に答える
2

#define#ifdefコンパイル時に評価されます (実際にはコンパイル前でも) 。これらは、以下の C コードとは無関係に、テキスト ファイルで評価されます。したがって、

if(val==0) {
   #ifndef PKT
   #define PKT
   #endif
}

#define常に行われます。そうでなければ、あなたのコードは定義が関数の外にある同じコードと同等です。https://en.wikipedia.org/wiki/C_preprocessorを参照してください

于 2013-07-23T07:56:01.753 に答える