Visual Studio 2015 теперь предупреждает о теневых переменных по умолчанию. Выдержка из http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx следует:
Затененные переменные
Объявление переменной «затеняет» другую, если окружающая область уже содержит переменную с тем же именем. Например:
void f(int x)
{
int y;
{
char x; //C4457
char y; //C4456
}
}
Внутреннее объявление x затеняет параметр функции f, поэтому компилятор выдаст:
предупреждение C4457: объявление 'x' скрывает параметр функции
Внутреннее объявление y затеняет объявление y в области видимости функции, поэтому компилятор выдаст:
предупреждение C4456: объявление 'y' скрывает предыдущее локальное объявление
Обратите внимание, что, как и раньше, объявление переменной с тем же именем, что и у параметра функции, но не заключенное во внутреннюю область, вместо этого вызывает ошибку:
void f(int x)
{
char x; //C2082
}
Компилятор выдает:
ошибка C2082: переопределение формального параметра 'x'