4


#undefマクロの再定義に 使用することについて質問があります。いくつかの#define-dマクロを含む
ファイルがあります。global.hこれらのマクロを使用するコードでは、マクロが保持する値が十分にジェネリックではないことがわかりました。マクロを再定義して、より一般的なものにしたいと思います。これを行うために、次のコードスニペットを作成しました。

 std::cout << endl << "Enter pitch threshold:" << endl;  
 std::cin >> pitchT;  
 #ifdef PitchThreshold  
  #undef PitchThreshold  
  #define PitchThreshold pitchT   
  #endif  

私の質問は次のとおりです
。この方法で#undefを使用すると、すべてのソースファイルでマクロが再定義されますか、それとも上記のコード行が記述されている関数に対してローカルですか?#undefおよび#define演算子の範囲は何ですか?
すべてのソースファイルでマクロ定義が確実に変更されるようにするには、(#define-d自体であるファイル内のマクロを変更する以外に)何ができますか?
ありがとう、
スリラム

4

2 に答える 2

10

#ifdefはプリプロセッサディレクティブです。これは、ソースコードがコンパイルされる前に適用されることを意味します。これは、「以下」のソースコードのみが影響を受けることを意味します。プリプロセッサを介してソースコードを実行すると、結果を確認できます。これにより、プリプロセッサの動作についてより多くの洞察が得られます。

于 2010-11-01T10:10:41.527 に答える
2

#undef演算子のスコープは、呼び出された後のファイル全体です。これには、それを含むすべてのファイルが含まれます(プリプロセッサはファイルをチェーンするだけなので)。プリプロセッサの一部であるため、スコープのような奇妙なものはありません。

于 2010-11-01T10:11:14.523 に答える