我有一個關於使用#undef
重新定義宏的問題。
我有一個文件global.h
其中包含一些#define-d宏。在使用這些宏的代碼中,我發現宏保存的值不夠通用。我想重新定義宏以使它們更通用。我寫了下面的代碼片段來做到這一點:範圍#undef C++
std::cout << endl << "Enter pitch threshold:" << endl;
std::cin >> pitchT;
#ifdef PitchThreshold
#undef PitchThreshold
#define PitchThreshold pitchT
#endif
我的問題是:
是否使用和#undef以這種方式確保所有源文件宏的重新定義,或者是本地的函數,其中上面的代碼行被寫入? #undef和#define運算符的範圍是什麼?
我可以做些什麼(除了改變它們所在的文件中的宏#define-d本身),以確保宏定義在所有源文件中被更改?
謝謝,
斯利拉姆
但是#undef操作符與它重新定義的值有什麼關係?例如,在上面的代碼片段中,pitchT是一個int,它對於重定義發生的函數是本地的。當pitchT超出範圍時,它是否會影響#define語句? – Sriram 2010-11-01 10:20:27
您不能在運行時更改宏的值。預處理器只進行文本替換,因此下次在您的代碼中使用「PitchThreshold」時,它將被替換爲「pitchT」(變量名稱,而不是其值)。 – 2010-11-01 11:11:52
那是我正在尋找的答案!謝謝larsmans!我認爲#define會用它的價值取代pitchT。 – Sriram 2010-11-01 11:41:51