From: NightStrike <nig...@gm...> - 2008-02-02 23:11:33
|
On 2/2/08, Danny Smith <dan...@cl...> wrote: > > > > > > On 2/2/08, Keith Marshall <kei...@us...> wrote: > > > On Saturday 02 February 2008 19:57, NightStrike wrote: > > > > If I put "#include <windows.h> at the top of all of these files, > > > > should it go before or after the extern C stuff? ie, this: > > > > > > > > #ifdef __cplusplus > > > > extern "C" { > > > > #endif > > > > > > It should go before that; it should do its own determination of what > > > should be `extern "C"', and you don't want to accidentally include > > > anything in that category, which doesn't belong there. > > > > Ok. I will have a patch when I get back from church. > > > > In some files, the inclusion of windows.h needs to be guarded, eg in > COM headers like oaidl.h > > #ifndef COM_NO_WINDOWS_H > #include <windows.h> > #include <ole2.h> > #endif > > Also look at objbase.h and rpc.h for another example of problem that can > arise with unconditional inclusion of windows.h. > > Some files (eg winerror.h, sql.h), don't need windows.h pollution at > all. > > But all these cases wll fall out with testing. What I did was compile each file without it: #include <file> int main() {return 0;} Then I compiled each file with it: #include <windows.h> #include <file> int main() {return 0;} If it compiled with zero warnings or errors (in reality, if gcc exited with a 0 status), I did not output the filename. If gcc had a nonzero exit status, I did. I then compared the two lists, and found 106 files that went from X number of warnings/errors to zero warnings/errors with the inclusion of windows.h. Only those files were changed. oaidl.h is an interesting one. I had pulled windows.h out of that ifndef clause. I suppose I should put it back.. but what is going on there? It compiles cleanly in the above example with it's outside of the ifndef. I also made an additional change to winldap.h. It was checking against the definition of two headers before including them. However, that safeguard checking is in the header itself, and thus redundant. Anyway, the patch is attached. If you guys want it, you can have it and do whatever you want with it. If you don't, well, then just ignore it, I guess. |