В общем, нет хорошего способа защитить себя от того, чем какая-либо сторонняя библиотека может загрязнить глобальное пространство имен.Вот почему Бог изобрел пространства имен.
Вы можете использовать пространства имен, если VERSION является глобальным символом, известным во время компиляции:
namespace yourStuff
{
int VERSION;
// references to VERSION here refer to the inner VERSION, not ::VERSION
}
, но если VERSION является макросом препроцессора (как я подозреваю с егов этом случае он не следует никаким правилам компиляции и существует вне правил компилятора.Вы можете обнаружить это с помощью других макросов препроцессора:
#ifdef VERSION
// define it to be something else
#else
#endif
(или используйте #undef, как в ответе Диего, чтобы убить его)
Но выполнение этого везде, где VERSION - это ссылки, будет неприятным.Вам просто нужно не использовать VERSION.