Visual Studio 2015 now warns about shadowed variables by default. Excerpt from http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx follows:
Shadowed variables
A variable declaration "shadows" another if the enclosing scope already contains a variable with the same name. For example:
void f(int x)
{
int y;
{
char x; //C4457
char y; //C4456
}
}
The inner declaration of x shadows the parameter of function f, so the compiler will emit:
warning C4457: declaration of 'x' hides function parameter
The inner declaration of y shadows the declaration of y in the function scope, so the compiler will emit:
warning C4456: declaration of 'y' hides previous local declaration
Note that, as before, a variable declaration with the same name as a function parameter but not enclosed in an inner scope triggers an error instead:
void f(int x)
{
char x; //C2082
}
The compiler emits:
error C2082: redefinition of formal parameter 'x'