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.
Existem inúmeras razões pelas quais as variáveis não utilizadas podem permanecer em uma base de código. Isso inclui:
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.
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.
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.
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.
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
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
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ê.
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