2
在研究windows解決方案min
/max
宏問題時,我找到了一個我很喜歡的答案,但我不明白它爲什麼起作用。 C++規範中有哪些內容說明宏替代不是在parens中發生的?如果是這樣的話?這只是其他方面的副作用,還是設計用於這種方式的語言?如果我使用額外的括號的max
宏不會導致出現問題:爲什麼包頭阻止宏觀替代?
(std::numeric_limits<int>::max)()
我在一家大型MFC項目上工作,並且有使用這些宏一些窗口庫,所以我寧願不使用#undef
技巧。
我的其他問題是這樣的。 .cpp文件中的#undef max
僅影響在其中使用的文件,還是會爲其他編譯單元取消定義max
?
'#undef X'只刪除了'X'的定義,直到當前文件編譯結束(或直到'X'再次被定義爲#)。 – mah
在包含Windows.h以禁用這些宏之前,您可以嘗試'#define NOMINMAX'。不要擔心會干擾MFC預期可用的任何內容。 –
NOMINMAX將不起作用。還有其他庫和頭文件需要min和max。就我而言,這是一個現有的項目,所以我不想讓項目的其他部分使用的東西沒有定義。 – shawn1874