首頁 >後端開發 >C++ >如何避免 Windows.h 和標準函式庫之間的「最大」巨集衝突?

如何避免 Windows.h 和標準函式庫之間的「最大」巨集衝突?

Barbara Streisand
Barbara Streisand原創
2024-11-11 10:41:02723瀏覽

How Can You Avoid

解決Windows.h 和Std 巨集之間的衝突

在嘗試從cin 取得有效整數輸入時,常常會遇到衝突Windows .h 中定義的max 巨集與標準庫中定義的max 巨集之間的關係。當使用帶有 max 參數的 std::cin.ignore() 函數時,會出現此問題,該函數在 Windows.h 中採用的參數數量與 std 中不同。

解決方案:抑制 Windows.h宏

為了避免衝突,請定義 NOMINMAX 巨集。此巨集可防止包含 Windef.h 中的最小和最大定義,從而解決了標準庫宏的歧義。

實作:

#pragma once
#define NOMINMAX

#include <Windows.h> // No min() or max() definitions included
#include <iostream>
using std::cin;
using std::cout;

void Foo()
{
    int delay = 0;
    do
    {
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        cout << "Enter number of seconds between submissions: ";
    } while(!(cin >> delay) || delay == 0);
}

透過定義NOMINMAX,您可以使用標準函式庫的 max 宏,而無需重新定義或單獨儲存其定義。這簡化了程式碼並消除了對容易出錯的解決方法的需求。

以上是如何避免 Windows.h 和標準函式庫之間的「最大」巨集衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn