Pourquoi gcc donne l'erreur de la variable non utilisée pour les variables locales, mais pas pour les variables globales?

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

  •  21-08-2019
  •  | 
  •  

Question

J'ai une question concernant gcc. Pourquoi je reçois une erreur de variable inutilisée quand je définir la variable locale dans une fonction mais pas lorsque la variable est globale dans un fichier unique?.

Je peux comprendre qu'il peut être utilisé pour quelqu'un d'autre, mais pour faire cela, alors je dois mettre le mot droit externe?

Merci d'avance.

Était-ce utile?

La solution

Si par « global dans un fichier unique », vous voulez dire "int x;" dehors de toute fonction, plus il est pas le travail des compilateurs pour détecter que la variable doit être disponible pour l'éditeur de liens dans le cas où une autre unité de compilation a besoin ( comme errno).

Si vous vouliez dire où il est "static int x" pas mis à la disposition l'éditeur de liens, ce qui est probablement juste un choix fait par GCC. Je ne crois pas que les compilateurs sont requis pour informer de cette situation et il ne fait aucun dommage réel autre que de perdre quelques octets dans l'espace d'adressage.

Autres conseils

Le compilateur n'a aucun moyen de savoir si une variable globale est utilisée - il pourrait être utilisé à partir d'une unité de compilation écrite dans une langue complètement différente, par exemple

.

Les variables globales peuvent être utilisées sur tout autre endroit qui ne peut pas connaître le compilateur. Par exemple, sur un programme de bibliothèque o externe.

locaux non utilisés peuvent être déterminées par le compilateur. GLOBALS non utilisés ne peuvent être déterminées par l'éditeur de liens, car ils peuvent être partagés entre les fichiers objets.

En général, l'éditeur de liens ne fait pas des avertissements pour le code-gen.

Lorsque la variable est globale, le compilateur a une visibilité complète pas dans toutes les unités de compilation du projet - la variable pourrait être modifiée dans une autre unité de compilation. L'éditeur de liens est en mesure de dire qu'il est utilisé, sans doute, il le supprime du fichier objet.

Parce que si elle est mondiale, il peut être utilisé par un autre module qui se reliera plus tard.

Il est un idiome commun d'avoir tous vos définis dans GLOBALS un seul fichier. Ce fichier ne peut même avoir un code, beaucoup moins de code qui utilise toutes les variables.

Je l'ai rencontré la même question quand je construis le dalvikVM dans android2.3 et je suis la clé du point. Il est dû au fait que les paramètres du compilateur est trop stricte:

LOCAL_CFLAGS + = -Werror .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top