處理Windows.h 和std 中的巨集衝突
使用Windows API 和C 標準函式庫時,您可能會遇到巨集之間的衝突定義,例如最大。如果包含 Windows.h(它定義了 max()),並且隨後包含了 C 標準函式庫(它也定義了 max()),則可能會發生這種情況。
一種解決方法是重新定義衝突的巨集,如中建議的您提供的程式碼片段(#undef max)。然而,這可能很麻煩並且容易出錯。更好的解決方案是在 Windows.h 中取消 max() 和相關巨集的定義。這可以透過定義預處理器巨集 NOMINMAX 來實現。
#define NOMINMAX #include <Windows.h> #include <iostream> using std::cin; using std::cout; void Foo() { int delay = 0; do { if(cin.fail()) { cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } cout << "Enter number of seconds between submissions: "; } while(!(cin >> delay) || delay == 0); }
透過在包含 Windows.h 之前定義 NOMINMAX,可以抑制 max()、min() 等的巨集定義,從而允許 C 標準使用這些巨集的函式庫版本不會發生衝突。
以上是如何解決Windows.h和C標準函式庫之間的巨集衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!