2011-06-03 9 views
20

-Wshadow "Advertirá siempre que una variable local sombree otra variable local". ¿Hay un equivalente en Visual C++ (2008)? Probé/W4 pero no me di cuenta. También probé Cppcheck pero eso tampoco lo vi.¿Hay un equivalente de gcc -Wshadow en C++ visual

p. Ej. si hago inadvertidamente:

class A 
{ 
     private: 
       int memberVar; 
     public: 
       void fn() 
       { 
         int memberVar = 27; 
       } 
}; 

¡Me gustaría saberlo!

+1

Esto le puede interesar también. http://stackoverflow.com/questions/486508/how-does-template-argument-shadowing-work-in-vs2005 –

Respuesta

7

Me temo que no.

Usted tal vez podría intentar compilar el código con Clang:

  • que tiene esta advertencia (y muchas otras)
  • que tiene un modo de compatibilidad para los encabezados de MSVC (y puede construir la mayor parte de MFC)

Utilizamos gcc en el trabajo, para construir nuestro código, pero compilamos regularmente con Clang para probar el código de conformidad con el Estándar y beneficiarnos de sus advertencias.

4

No hay ninguna advertencia acerca de esto que es disabled by default, por lo que si no está viendo la advertencia en los niveles predeterminados, diría que no se puede hacer. (Que es cojo.)

7

Echa un vistazo a las advertencias C6244 y C6246

pero se necesita para permitir el análisis de código automática para obtener estos datos, consulte How to: Enable and Disable Automatic Code Analysis for C/C++

Si no puede hacerlo en su edición VS (Analyzing Managed Code Quality by Using Code Analysis), intente agregar el indicador/analyze a la línea de comando de compilación. Recibirá algunas advertencias de que el indicador '/ analizar-', que ha sido agregado por su IDE, se reemplaza con el indicador '/ analyze' agregado manualmente, pero el análisis funcionará ;-)

+2

En mi humilde opinión. Estas advertencias no se deben analizar advertencias ... – Calmarius

+0

MSDN ahora dice "este tema ya no está disponible" en su primer enlace. – pjc50

+0

@ pjc50 si elige una versión diferente, funcionará, p. http://msdn.microsoft.com/en-us/library/6yz6c9dy(v=vs.100).aspx – dwn

1

(Yo agregaría esto como un comentario a la respuesta de Dawn, pero no tiene una reputación suficiente en este momento)

Hay un pedido abierto de issue en Microsoft Connect para actualizar la advertencia de Análisis de código a compilación estándar. Sugiero subirvotaciones para tratar de llamar la atención de Microsoft.

+0

De acuerdo con ese enlace, esto se corrigió en la próxima versión principal de Visual C++. – Kim

+1

Esto ahora ha aparecido en Visual Studio 2015 Preview: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx – Kim

4

Visual Studio 2015 ahora advierte sobre las variables ocultas de forma predeterminada. Extracto de http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx sigue:

las variables sombreados una declaración de variable "sombras" otro si el ámbito de inclusión ya contiene una variable con el mismo nombre.Por ejemplo:

void f(int x) 
{ 
    int y; 
    { 
     char x; //C4457 
     char y; //C4456 
    } 
} 

La declaración interna de x sombras el parámetro de la función f, por lo que el compilador emitirá: advertencia C4457: declaración de 'x' esconde parámetro de función La declaración interna de sombras Y la declaración de y en el alcance de la función, por lo que el compilador emitirá: advertencia C4456: la declaración de 'y' oculta la declaración local anterior Tenga en cuenta que, como antes, una declaración de variable con el mismo nombre como parámetro de función pero no encerrado en el alcance interno desencadena un error en su lugar:

void f(int x) 
{ 
    char x; //C2082 
} 

El compilador emite: error C2082: redefinición de los parámetros formales 'x'

Cuestiones relacionadas