Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Perlanggaran Makro antara Windows.h dan Pustaka Standard C?

Bagaimana untuk Menyelesaikan Perlanggaran Makro antara Windows.h dan Pustaka Standard C?

Susan Sarandon
Susan Sarandonasal
2024-11-17 04:42:03184semak imbas

How to Resolve Macro Collisions between Windows.h and the C   Standard Library?

Mengendalikan Perlanggaran Makro dalam Windows.h dan std

Apabila bekerja dengan Windows API dan perpustakaan standard C, anda mungkin menghadapi konflik antara makro takrifan, seperti maks. Ini boleh berlaku jika Windows.h disertakan, yang mentakrifkan max(), dan seterusnya pustaka standard C disertakan, yang juga mentakrifkan max().

Satu penyelesaian ialah mentakrifkan semula makro yang bercanggah, seperti yang dicadangkan dalam coretan kod yang anda berikan (#undef max). Walau bagaimanapun, ini boleh menyusahkan dan terdedah kepada kesilapan. Penyelesaian yang lebih baik adalah untuk menyekat definisi max() dan makro yang berkaitan dalam Windows.h. Ini boleh dicapai dengan mentakrifkan makro prapemproses 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);
}

Dengan mentakrifkan NOMINMAX sebelum memasukkan Windows.h, takrifan makro untuk max(), min(), dan lain-lain ditindas, membenarkan standard C versi perpustakaan makro ini untuk digunakan tanpa konflik.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Perlanggaran Makro antara Windows.h dan Pustaka Standard C?. 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