c ++ - Hvorfor omfatter MinGW automatisk < windef.h >

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive DWORD på en platform agnostisk måde, og jeg kører ind i følgende compiler fejl:




...mingw.orgmingw\_gcc\_4.5.0in../lib/gcc/mingw32/4.5.0/../../
../../include/windef.h:229:23: error: 
'DWORD' has a previous declaration as 'typedef long unsigned int DWORD'


Jeg vil gerne være afhængig af min implementering af DWORD og ikke på den underliggende compiler, der ved, hvad det er (ved hjælp af typedefs, ikke makroer).


Hvorfor omfatter mingw (gcc 4.5.0) automatisk 'windef.h', når en applikation er kompileret?


Hvordan forhindrer man denne inddragelse?

Bedste reference


Min MinGW synes ikke at trække automatisk ind windef.h. Jeg formoder, at dit program indeholder et andet overskrift, som indirekte trækker det ind. Kan du sende et kort program, der viser problemet?


Bemærk, at jeg ser dig 'bruger', hvorvidt \_WINDEF\_H er defineret for at bestemme om disse ting allerede er skrevet. Det kan fungere, når MinGW bruges, men den faktiske Windows SDK definerer \_WINDEF\_ når windef.h er inkluderet - mindst en bestemt version. Jeg forestiller mig, at dette er ret stabilt, men det er helt sikkert muligt, at dette er ændret på et tidspunkt.


Det kan være bedre at teste på noget som makroen MAKEWORD for at opdage, om windef.h allerede er medtaget - MAKEWORD er dokumenteret som en makro defineret i windef.h, så det bør være stabilt på tværs af SDK-versioner, uanset om de er fra Microsoft eller ej.

Andre referencer 1


Løst det,


Det blev inkluderet af windows.h, inkluderet af en boost header fil.


Min header-fil, der definerer disse typedefs, søger simpelthen for tilstedeværelsen af ​​'\_WINDEF\_H' - og har en regel om, at den skal være den sidste inkluderede header-fil (for at give tilstrækkelig tid til, at Windows-headerfilerne skal medtages, hvorved behovet for min typedef).