es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C++: No hay advertencias para constantes locales no utilizadas con /W4 (MSVC)

El siguiente código se compiló con MSVC 19.29.30133.0

Dada la siguiente línea de c++ en una función

int foo = 0;

Si la variable no se referencia, MSVC le dará la siguiente advertencia: warning C4189: 'foo': local variable is initialized but not referenced

Sin embargo, si se agrega const delante de ella, la advertencia desaparece.

const int foo = 0; // Esta línea no genera ninguna advertencia con MSVC 19.29.30133.0

Pero esta variable no utilizada aún debería ser eliminada, ¿verdad?

Entonces, ¿por qué MSVC no da ninguna advertencia? ¿Es un error? ¿Existe alguna especificación para constantes no utilizadas?

Reproducción mínima:

int main() {
    int a = 0;
    const int b = 0;

    return 0;
}

Salida:
Starting build…
cl.exe /Zi /EHsc /nologo /W4 /std:c++20 /Fe: F:\prog\INF1005C\tst\unused_constant.exe F:\prog\INF1005C\tst\unused_constant.cpp
unused_constant.cpp
F:\prog\INF1005C\tst\unused_constant.cpp(2): warning C4189: ‘a’: local variable is initialized but not referenced
Build finished with warning(s).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La advertencia para variables no utilizadas existe para ayudar a asegurar que el código no esté lleno de variables innecesarias que no sirven para nada. Sin embargo, dado que una constante, por definición, no puede ser cambiada durante la ejecución del programa, el hecho de tener una constante no utilizada no representa el mismo riesgo para el rendimiento del programa. Por lo tanto, es un comportamiento esperado que MSVC no brinde una advertencia para constantes no utilizadas, y esto no es un error. No hay una especificación para constantes no utilizadas específicamente, pero este comportamiento es consistente con el comportamiento para variables no utilizadas en otros lenguajes de programación.

Comments are closed.