7
votes

Pourquoi un type de données est-il nécessaire pour une initialisation qui suit une déclaration?

Considérez le programme C simple C: xxx

si l'initialisation de A a été écrite sans le type de données, tel que A = 11 , le compilateur soulève un avertissement. Pourquoi l'initialisation de A nécessite-t-elle un type de données, lorsque la déclaration de A spécifie déjà son type de données?

c

4 commentaires

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 mot-clé, qui fait fondamentalement cela.


Stackoverflow.com/q/3095861/3185968


@arrorowd: Je ne vois vraiment pas la connexion à Auto


3 Réponses :


-3
votes

Comme votre exemple: xxx

Vous pouvez écrire du code comme ceci: int a; xxx

que parce que a = 1; // <--- est une déclaration de code int a = 1; // <--- est une référence à la valeur constante

en C, vous ne pouvez pas écrire la mission hors de la portée de la fonction.


1 commentaires

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 préprocesseur ou en utilisant le mot-clé const .



2
votes

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: xxx

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: xxx

est une instruction illégale.


1 commentaires

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.



3
votes

int a au champ d'application du fichier est une définition "provisoire" (car elle manque la partie initialisation). Cela signifie que A peut être défini à nouveau avec une valeur à un point ultérieur.

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: xxx

L'autre solution a généralement un mérite plus pratique: xxx

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.

EDIT:

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.


3 commentaires

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 .