Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Perlanggaran Makro Windows.h Max dengan std::numeric_limits::max()?

Bagaimana untuk Menyelesaikan Perlanggaran Makro Windows.h Max dengan std::numeric_limits::max()?

DDD
DDDasal
2024-11-11 12:59:03718semak imbas

How to Resolve the Windows.h Max Macro Collision with std::numeric_limits::max()?

Windows.h Max Macro Collision with Std: A Solution

Apabila membangun dengan C , konflik antara definisi perpustakaan standard dan yang terdapat dalam Pengepala Windows.h boleh timbul. Perlanggaran ini boleh menjejaskan penggunaan makro maksimum.

Secara khusus, coretan kod yang disediakan cuba untuk mengendalikan input pengguna yang tidak sah daripada cin menggunakan makro maksimum. Walau bagaimanapun, pada Windows, makro maks daripada Windows.h bercanggah dengan std::numeric_limits::max().

Untuk menyelesaikan isu ini, pendekatan yang lebih bersih dan elegan adalah dengan menyekat definisi min dan maks dalam Windef.h. Ini boleh dicapai dengan mentakrifkan makro NOMINMAX sebelum menyertakan Windows.h.

#define NOMINMAX
#include <Windows.h> // includes WinDef.h which defines min() max()

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);

Dengan mentakrifkan NOMINMAX, anda dengan berkesan melumpuhkan takrifan min dan maks yang bercanggah dalam Windows.h, membenarkan penggunaan std:: numeric_limits::max() makro tanpa pengubahsuaian atau undefining. Penyelesaian ini menghapuskan keperluan untuk penyelesaian yang buruk dan memastikan penyepaduan yang lancar dengan perpustakaan standard C.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Perlanggaran Makro Windows.h Max dengan std::numeric_limits::max()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn