"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Variables no utilizadas en C/C ++: ¿Por qué y cómo?

Variables no utilizadas en C/C ++: ¿Por qué y cómo?

Publicado el 2025-02-06
Navegar:312

Unused variables in C/C  : why and how?

Al revisar el código C/C, a menudo encontramos variables que nunca se usan. Tales variables no utilizadas ocurren por una variedad de razones. En esta publicación, observamos algunas de las causas más comunes por qué ocurren variables no utilizadas en el código C/C. Revisamos cómo que el compilador advierta sobre las variables no utilizadas y cómo suprimir las advertencias de variables no utilizadas específicas.

Por qué las variables no se utilizan

Hay numerosas razones por las cuales las variables no utilizadas pueden permanecer en una base de código. Estos incluyen:

  1. bugs and errores : la razón más obvia para una variable no utilizada es el código defectuoso. O la variable realmente no es necesaria y se puede eliminar, o la variable es necesaria, pero hemos olvidado usarla en algunos puntos críticos.

  2. Refactoring: Como el software se escribe y reescribe, se pueden eliminar secciones completas de código. Las variables que alguna vez fueron vitales para el código, como los resultados de los cálculos auxiliares, pueden quedarse atrás, sin usar.

  3. a prueba de futuro: las variables no utilizadas pueden no solo ocurrir como un legado del código pasado sino también como legado del código futuro. Puede declarar variables en anticipación del código que aún no se ha escrito.

  4. compilación condicional: Las variables pueden permanecer sin usar según la fase del preprocesador. Un ejemplo estándar es una variable que solo se define para fines de depuración. Su código puede contener algo de la forma

const auto value = compute_some_value();
const auto value_for_comparison_only = compute_same_value_differently();
assert( value == value_for_comparison_only );

Si compila con -dndebug, entonces el compilador podría advertirle que value_for_comparison_only nunca se usa: de hecho, la declaración de afirmación ha sido reemplazada por ... nada.

Cómo detectar variables no utilizadas

diferentes compiladores y configuraciones de nivel de advertencia pueden influir en si una variable se informa como no utilizada durante el proceso de compilación.

Por ejemplo, GCC y Clang presentan el indicador de variable -Wunused -Variable, que desencadena advertencias sobre variables no utilizadas. La bandera ya está implícita con la opción de advertencia de la pared, y se puede desactivar a través de -wno -unis -variable.

Mi recomendación es compilar siempre con -wall y luego apagar selectivamente las advertencias como permisibles. Esto tendrá todas las instancias de variables no utilizadas.

Cómo no detectar variables no utilizadas: atributos

Si bien siempre debemos compilar con tantas advertencias habilitadas como factibles, hay circunstancias en las que queremos desactivar selectivamente las advertencias sobre variables particulares no utilizadas. Una forma popular de hacerlo es un elenco para anular:

Object unused_object;
(void)unused_object;

el elenco a nulo cuenta como un uso (pro forma) de la variable, por lo que no se emitirá ninguna advertencia.

Si bien esto elimina las advertencias de que no usado_object no se usa, igual que se pretende, hay formas de mejorar esto. Nos gustaría tener una semántica explícita de que este vacío significa un objeto no utilizado. Una forma común es a través de la definición de una macro:

#define UNUSED(x) (void)(x);
// ...
Object unused_object;
UNUSED(unused_object);

Una ventaja es que ahora comunicamos explícitamente la intención (o falta de ella) de esta variable. Además, si decidimos purgar el código de variables no utilizadas, buscarlas es mucho más fácil.

yendo más allá de las macros, tenemos atributos variables: nativos del idioma C o como extensión del idioma proporcionada por los compiladores C/C. Por ejemplo, Clang y GCC permiten el atributo variable __attribute __ ((sin usar)). C 17 Admite el atributo [[tal vez_unused]]:

Object unused_object2 __attribute__((unused)) = x;  // should be placed after declaration
[[maybe_unused]] Object unused_object1 = x;         // must be placed before declaration

Estos atributos se comunican al compilador (y a nosotros) que estas variables podrían no ser utilizadas y que estamos bien con eso.

Históricamente, los atributos GCC han aparecido primero, siendo extensiones de lenguaje específicas del compilador en C y C. Desde C 17 en adelante, los atributos son parte del estándar del lenguaje. Sin embargo, no solo la ortografía es diferente, sino que el estándar y las extensiones de GCC no están de acuerdo dónde colocar el atributo.

El atributo [[quizás_unused]] encontrará la mayoría de sus aplicaciones con compilación condicional. Por ejemplo, es un atributo natural para las variables de depuración. Por razones puramente estéticas, personalmente prefiero definir una macro #define quizás_unused [[tal vez_unused]].

Una ventaja de __attribute __ ((sin usar)) es que realmente le advertirá si la variable se usa alguna vez en el código. No es tal vez sin usar sino definitivamente no se usa nunca, y usar la variable ahora producirá una advertencia.

Manteniendo cosas inútiles

Aparentemente, las variables no utilizadas son frecuentes e importantes incluso para garantizar sus propias extensiones de lenguaje.

en comparación, ¿es comentar la variable no utilizada una buena estrategia? ¡No siempre! Hay razones por las que mantendrá una variable no utilizada en todo el código de desarrollo y la etapa de depuración. Supongamos que la variable se usó en una versión anterior del código, tal vez ni siquiera haya decidido si el código anterior debe ser archivado o reintegrado; Significado: no sabe si puede necesitar la variable no utilizada nunca más.

puede ser útil para fines de depuración para mantener el código como:

auto unused_variable __attribute__((unused)) = complicated_calculation( arg1, arg2, arg3 );

incluso si el resultado del cálculo complicado nunca se usa, mantenerlo cerca constituye otro punto de falla ... y eso es exactamente lo que desea durante la depuración. Incluso si no está destinado originalmente a la depuración, hacer que el programa inicialice esta variable será útil si alguna vez decide que lo necesita (nuevamente).

Espero que esta publicación sobre variables no utilizadas haya sido útil para usted.

Declaración de liberación Este artículo se reproduce en: https://dev.to/martinlicht/unused-variebles-in-cc-why-and-how-4cm4 Si hay alguna infracción, comuníquese con [email protected] para eliminarlo.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3