"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Variáveis ​​não utilizadas em C/C ++: Por que e como?

Variáveis ​​não utilizadas em C/C ++: Por que e como?

Postado em 2025-02-06
Navegar:239

Unused variables in C/C  : why and how?

Ao revisar o código C/C, geralmente encontramos variáveis ​​que nunca são usadas. Tais variáveis ​​não utilizadas ocorrem por vários motivos. Nesta postagem, analisamos algumas das causas mais comuns por que as variáveis ​​não utilizadas ocorrem no código C/C. Revisamos como alertar o compilador sobre variáveis ​​não utilizadas e como suprimir os avisos para variáveis ​​não utilizadas específicas.

Por que as variáveis ​​não são utilizadas

Existem inúmeras razões pelas quais as variáveis ​​não utilizadas podem permanecer em uma base de código. Isso inclui:

  1. bugs e erros : O motivo mais óbvio para uma variável não utilizada é o código falho. A variável realmente não é necessária e pode ser removida, ou a variável é necessária, mas esquecemos de usá -la em alguns pontos críticos.

  2. refatoring: como o software é escrito e reescrito, seções inteiras de código podem ser removidas. Variáveis ​​que antes eram vitais para o código, como resultados de cálculos auxiliares, podem ser deixados para trás, não utilizados.

  3. Future-Propering: variáveis ​​não utilizadas podem não apenas ocorrer como um legado de código passado, mas também como legado do código futuro. Você pode declarar variáveis ​​antecipadamente do código que ainda está para ser escrito.

  4. compilação condicional: As variáveis ​​podem permanecer não utilizadas, dependendo da fase pré -processadora. Um exemplo padrão é uma variável definida apenas para fins de depuração. Seu código pode conter algo do formulário

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

Se você compilar com -dndebug, o compilador poderá avisar que Value_for_comparison_only nunca é usado: de fato, a declaração assert foi substituída por… nada.

Como detectar variáveis ​​não utilizadas

diferentes compiladores e configurações de nível de alerta podem influenciar se uma variável é relatada como não utilizada durante o processo de compilação.

Por exemplo, o GCC e o CLANG apresentam o sinalizador -wunused -variável, que desencadeia avisos sobre variáveis ​​não utilizadas. A bandeira já está implícita na opção de aviso de parede e pode ser desligada via -wn -unus -variable.

! Todas as instâncias de variáveis ​​não utilizadas.

Como não detectar variáveis ​​não utilizadas: atributos

Embora sempre devamos compilar com tantos avisos possível, há circunstâncias em que queremos desativar seletivamente avisos sobre variáveis ​​específicas não utilizadas. Uma maneira popular de fazer isso é um elenco para anular:


objeto unutuse_object; (void) UnusUse_Object;
Object unused_object;
(void)unused_object;
O elenco para voar contam como um uso (pro forma) da variável, portanto, nenhum aviso será emitido.

... Gostaríamos de ter semântica explícita de que esse invólucro de vazio significa um objeto não utilizado. Uma maneira comum é através da definição de uma macro:


#define não utilizado (x) (void) (x); // ... Objeto UnUsed_Object; Não utilizado (não utilizado_Object);

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

indo além das macros, temos atributos variáveis: nativo do idioma c ou como extensão de idioma fornecida pelos compiladores C/C. Por exemplo, Clang e GCC permitem o atributo variável __attribute __ ((não utilizado)). C 17 suporta o atributo [[talvez_unusused]]:


objeto unUsed_Object2 __attribute __ ((não utilizado)) = x; // deve ser colocado após a declaração [[talvez_unused]] objeto unUsUse_Object1 = x; // deve ser colocado antes da declaração

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

historicamente, os atributos do GCC apareceram primeiro, sendo extensões de idiomas específicas do compilador em c e c. A partir de C 17, os atributos fazem parte do padrão de idioma. No entanto, não apenas a ortografia é diferente, mas as extensões padrão e do GCC não concordam onde colocar o atributo.

O atributo [[talvez_unusous]] encontrará a maioria de seus aplicativos com compilação condicional. Por exemplo, é um atributo natural para variáveis ​​somente de depuração. Por razões puramente estéticas, eu pessoalmente prefiro definir uma macro #define talvez_unused [[talvez_unused]].

Uma vantagem de __attribute __ ((não utilizada)) é que ele realmente o alertará se a variável for usada no código. Não é

talvez não utilizado

, mas definitivamente nunca usado, e o uso da variável agora produzirá um aviso. Mantendo coisas inúteis

aparentemente, variáveis ​​não utilizadas são frequentes e importantes o suficiente para justificar suas próprias extensões de idioma.

em comparação, está comentando a variável não utilizada uma boa estratégia? Nem sempre! Há razões pelas quais você manteria uma variável não utilizada em todo o código de desenvolvimento e o estágio de depuração. Suponha que a variável tenha sido usada em uma versão anterior do código, talvez você ainda não tenha decidido se o código antigo deve ser arquivado ou reintegrado; Significado: você não sabe se pode precisar da variável não utilizada novamente.

pode ser útil para fins de depuração manter o código como:


auto -utilitário_variable __attribute __ ((não utilizado)) = complicado_calculocation (arg1, arg2, arg3);

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

Espero que esta postagem sobre variáveis ​​não utilizadas tenha sido útil para você.

Declaração de lançamento Este artigo é reproduzido em: https://dev.to/martinlicht/unused-variables-in-cc-why-and-how-4cm4 Se houver alguma infração, entre em contato com [email protected] para excluí-lo.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3