Por gcc dá erro de variável não utilizada para as variáveis ??locais, mas não para variáveis ??globais?

StackOverflow https://stackoverflow.com/questions/664414

  •  21-08-2019
  •  | 
  •  

Pergunta

Eu tenho uma pergunta sobre gcc. Por que eu recebo um erro de variável não utilizada quando eu definir a variável local em uma função, mas não quando a variável é global em um arquivo único?.

Eu posso entender que ele pode ser usado para outra pessoa, mas para fazer isso, então eu preciso colocar a palavra certa externo?

Agradecemos antecipadamente.

Foi útil?

Solução

Se por "global em um arquivo único", quer dizer fora "int x;" de qualquer função, o que não é o trabalho compiladores para detectar que, a variável precisa estar disponível para o vinculador no caso de outro unidade de compilação precisa dele (como errno).

Se você quis dizer "static int x" onde não é disponibilizado para o vinculador, este é provavelmente apenas uma escolha feita pelo GCC. Eu não acredito que os compiladores são required para notificar disso e não faz nenhum dano real que não desperdiçando alguns bytes em seu espaço de endereço.

Outras dicas

O compilador não tem como saber se uma variável global é usada -. Ele poderia ser usado a partir de uma unidade de compilação escrito em uma linguagem completamente diferente, por exemplo

Como as variáveis ??globais pode ser usado em qualquer outro lugar que o compilador não pode conhecida. Por exemplo em uma biblioteca externa o programa.

locals não utilizados podem ser determinada pelo compilador. globals não utilizados só pode ser determinada pelo vinculador, uma vez que eles podem ser compartilhados entre arquivos objeto.

Em geral, o vinculador não fazer advertências para o código-gen.

Quando a variável é global, o compilador não tem plena visibilidade em todas as unidades de compilação no projeto - a variável poderia ser modificado em outra unidade de compilação. O ligador é capaz de dizer que ele não é usado, provavelmente ele irá removê-lo do arquivo do objeto.

Porque se é global, ele pode ser usado por um outro módulo que fica ligado mais tarde.

É uma expressão comum ter todos os seus globals definidos em um único arquivo. Esse arquivo pode até não ter qualquer código, muito menos código que usa todas as variáveis.

Eu encontrei a mesma pergunta quando eu construir o dalvikVM em android2.3 e eu tenho a chave do ponto. É por causa de que os parâmetros do compilador é muito rigoroso:

LOCAL_CFLAGS + = -Werror .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top