Reputation: 1612
I have a c++ implementation file (my.cpp) that indirectly includes a header file (b.h) that defines _MAX_DRIVE:
// b.h
#define _MAX_DRIVE 64
Then my.cpp includes stdlib.h which also defines _MAX_DRIVE
// stdlib.h
#define _MAX_DRIVE 3 /* max. length of drive component */
Obviously this produces a macro-redefinition warning:
stdlib.h(185) : warning C4005: '_MAX_DRIVE' : macro redefinition
My questions are:
Upvotes: 4
Views: 8157
Reputation: 9340
How much code is affected by this redefinition, is it just the compilation unit for my.cpp?
It affects ALL files that includes b.h and stdlib.h, if it's never #undef
-ed
Could the redefined value make its way in to other code if my.cpp is part of a static library?
No, preprocessor symbols lives only at compilation time. Compiled modules have nothing to do with it.
If I never even reference _MAX_DRIVE in my.cpp, is is safe to tell the compiler to ignore this macro redefinition warning?
Yes, until someday you or any of your code's users use it and forget or don't know about this danger.
Upvotes: 3
Reputation: 272667
#undef
.Upvotes: 10