What is the scope of a c++ macro redefinition?

c++, visual-c++

Solution

- It's until the end of the current compilation unit, or until the next `#undef`.

- No; macro names are only seen by the preprocessor, which finishes running before compilation even begins.

- It doesn't sound like a very sensible idea. It would be a better idea to avoid having two macros with the same name (especially one that begins with a single underscore followed by a capital letter, as they're reserved for the implementation).

Problem

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: - How much code is affected by this redefinition, is it just the compilation unit for my.cpp? - Could the redefined value make its way in to other code if my.cpp is part of a static library? - If I never even reference _MAX_DRIVE in my.cpp, is is safe to tell the compiler to ignore this macro redefinition warning?

Original source