Considérez le programme C simple C: si l'initialisation de A code> a été écrite sans le type de données, tel que A = 11 code >, le compilateur soulève un avertissement. Pourquoi l'initialisation de A code> nécessite-t-elle un type de données, lorsque la déclaration de A code> spécifie déjà son type de données? P> p>
3 Réponses :
Comme votre exemple: Vous pouvez écrire du code comme ceci:
int a; p> que parce que
a = 1; // <--- est une déclaration de code
int a = 1; // <--- est une référence à la valeur constante p> en C, vous ne pouvez pas écrire la mission hors de la portée de la fonction. p> p>
Vous mélangez des trucs ici, aucune constance n'est définie dans votre code. Il existe deux manières simples de définir des constantes, en utilisant #define b> préprocesseur ou en utilisant le mot-clé const b>.
Je pense que cela a quelque chose à voir avec le fait que vous ne pouvez pas écrire des instructions dans la portée globale. Ce que cela signifie, c'est: définit une variable. Cela indique au compilateur d'affecter une adresse statique à la variable, car elle est globale. La valeur par défaut (affectation) est juste un bonus supplémentaire.
Tandis que: p> est une instruction illégale. P> p>
Mais je demande pourquoi le compilateur a besoin du type de données dans les déclarations / initialisation ultérieures, lorsqu'il a déjà vu le type de données de la variable. Je ne demande pas pourquoi la mission est illégale en dehors d'un organisme de fonction.
Une définition provisoire peut ou non agir comme une définition, selon qu'il existe une définition externe réelle avant ou après dans l'unité de traduction: p> L'autre solution a généralement un mérite plus pratique: p> la définition provisoire pourrait précède la définition réelle, si, par exemple, la constante utilisée pour l'initialiser n'est pas disponible au premier point. P> EDIT: STRY> P> Vous semblez être confus que vous n'êtes pas capable effectuer une affectation au champ d'application du fichier. Un programme C est autorisé à avoir des opérations réelles uniquement dans les fonctions. Au champ d'application du fichier, on ne peut définir ou déclarer des variables, des types et des fonctions. P> P> int a code> au champ d'application du fichier est une définition "provisoire" (car elle manque la partie initialisation). Cela signifie que A code> peut être défini à nouveau avec une valeur à un point ultérieur.
Je ne vois pas comment ces réponses "Pourquoi l'initialisation d'un type de données nécessite-t-elle une déclaration lorsque la déclaration d'A spécifie déjà son type de données?"
Je ne vois vraiment pas comment cela aurait un mérite pratique dans une situation.
@Lundin: Imaginez une situation dans laquelle vous incluez un morceau de code généré automatiquement à la fin (avec l'initialisation), mais fonctionne avant de pouvoir accéder au A code>.
Eh bien, je ne suis pas sûr de votre question, mais d'écrire un code de côté de la fonction de fonctionnement ....
Pour C ++, il y a
auto code> mot-clé, qui fait fondamentalement cela.Stackoverflow.com/q/3095861/3185968
@arrorowd: Je ne vois vraiment pas la connexion à Auto