Redeclaration Erreur
J'ai compris la différence entre la déclaration et la définition
Et j'ai été la pratique d'une certaine question, quand j'ai frappé le doute, le code ci-dessous m'a demandé de la liste de l'erreur dans le code.
f(int a,int b)
{
int a;
a=20;
return a;
}
Pourquoi cette donne nouvelle déclaration erreur de a
?
Ne devrait-il pas donner la définition de plusieurs de a
parce que dans:
f(int a,int b)
— icia
est défini droit?- et dans le corps de la fonction,
int a
est défini à nouveau?
Alors pourquoi pas la définition de plusieurs erreur?
Les définitions sont aussi des déclarations. Les multiples déclaration erreur est diagnostiqué avant il vérifie plusieurs définitions
Je pense qu'il est de se demander pourquoi le message d'erreur dit "re-déclaration" au lieu de "définition de plusieurs"
Rohit vous devez inclure le compilateur nom et la version et le message d'erreur exact de la question
J'ai bien aimé l'explication de Matt, merci, même si je savais que cette définition est un sur-ensemble de la déclaration, de Son un comme le fait de frapper la première erreur lors de la compilation et la communication plutôt que de la vérification de l'erreur plus
Bien matt, après la lecture de votre commentaire, j'ai pensé, je reçois la réponse à ma question, mais n'est-il pas que nous pouvons déclarer la variable comme autant de fois que nous voulons ? Donc, bonbons à la Menthe réponse ci-dessous fait beaucoup plus de sens que la déclaration des paramètres de la fonction diffère de la déclaration de la variable locale, de Sorte que le compilateur donne cette erreur.
Je pense qu'il est de se demander pourquoi le message d'erreur dit "re-déclaration" au lieu de "définition de plusieurs"
Rohit vous devez inclure le compilateur nom et la version et le message d'erreur exact de la question
J'ai bien aimé l'explication de Matt, merci, même si je savais que cette définition est un sur-ensemble de la déclaration, de Son un comme le fait de frapper la première erreur lors de la compilation et la communication plutôt que de la vérification de l'erreur plus
Bien matt, après la lecture de votre commentaire, j'ai pensé, je reçois la réponse à ma question, mais n'est-il pas que nous pouvons déclarer la variable comme autant de fois que nous voulons ? Donc, bonbons à la Menthe réponse ci-dessous fait beaucoup plus de sens que la déclaration des paramètres de la fonction diffère de la déclaration de la variable locale, de Sorte que le compilateur donne cette erreur.
OriginalL'auteur | 2015-02-16
Vous devez vous connecter pour publier un commentaire.
Une définition est toujours une déclaration. La différence est qu'une définition aussi donne tout ce que vous déclarez une certaine valeur.
Dans votre exemple, par la voie, il est seulement un redeclaration erreur:
Vous avez probablement censé pour ce faire:
Mais dans ce cas, la plupart des compilateurs lancer une "redeclaration" erreur de trop. Par exemple, GCC déclenche le message d'erreur suivant:
C'est parce que
a
est défini à l'origine comme un paramètre, qui est différente d'une définition de la variable à l'intérieur de la fonction. Comme le compilateur voit que vous êtes re-déclarer quelque chose qui est d'une autre "race" de votre nouvelle déclaration, il ne peut pas moins de soins si votre illégale déclaration est une définition ou pas, parce que cela concerne la "définition" d'une manière différente en termes de paramètres de la fonction et de la fonction des variables locales.Cependant, si vous faites cela:
GCC, par exemple, jette un redéfinition erreur, parce que les deux
c
-s sont fonction de variables locales.un paramètre d'une fonction est toujours une définition. Elle est déclarée dans l'en-tête de fonction et initialisé par l'appel de la fonction avec des arguments, c'est à dire lorsque la fonction est exécutée, tous les paramètres seront initialisés, d'où ils seront défini. Lorsque vous essayez de re-définir un paramètre à l'intérieur d'une fonction, c'est sorte de de même pour un confilcting-type de l'erreur comme dans ton exemple, oui, mais dans ce cas, c'est parce qu'un paramètre et une variable locale est les différents types de symboles en ce qu'elles sont définies dans un autre mode.
Pourquoi êtes-vous concernant la définition de l'initialisation, je suppose qu'ils sont deux choses différentes, l'Initialisation est juste fournir la variable avec une valeur, rien de plus :/
si nous parlons en termes de variables locales, définition = déclaration + initialisation, c'est à dire
int c = 20
déclarec
et l'initialise à la valeur20
, donc définition comme une variable avec la valeur 20, etint c
déclare simplement qu'il. Des trucs un peu différents en fonction de la portée, à vous de voir =)oui, on pourrait sans doute soutenir que ce raisonnement (définition = déclaration + initialisation) est une terminologie erronée par la norme (conformément à la norme, une définition d'un objet est quelque chose qui se réserve la mémoire pour l'objet), mais c'est la façon dont la plupart des compilateurs de différencier entre la variable locale de la définition et de la déclaration.
OriginalL'auteur Mints97
Lorsque vous déclarez une variable dans votre code,un bloc de mémoire alloué avec ce nom de variable selon le type de données utilisées dans votre déclaration.
Mais lorsque vous essayez de redeclare la même variable le processeur tente d'allouer de la mémoire qui est déjà alloué avec le même nom.de sorte que le processeur le visage d'ambiguïté lors de l'accès au bloc de mémoire avec ce nom de variable, le compilateur ne permettent pas que l'instruction, donc plusieurs déclarations ne sera pas autorisé et vous obtiendrez une erreur de compilateur GCC dire,
dans votre code
sur la disposition de la mémoire de deux blocs ne peut pas avoir la même identité(nom de variable), d'où le compilateur renvoie un redeclaration erreur que de multiples déclarations ne sont pas possibles, lorsque la variable 'a' est redéclarée.
OriginalL'auteur sravan reddy