2017-02-28 1 views
-1

J'ai créé une structure avec deux éléments et j'ai essayé d'affecter une valeur à l'un des éléments de la structure en dehors de la fonction principale. Mais je reçois une erreur lors de la compilation.Affectation d'une valeur à l'élément de structure côté extérieur

#include <stdio.h> 
#include <stdlib.h> 
struct node{ 
    char a; 
    int b; 
}; 
struct node sr; 
sr.b = 48; 
int main(){ 
    printf("Value:%d",sr.b); 
    return 0; 
} 

J'attribue une valeur après la déclaration. Pourquoi ce code donne-t-il une erreur?

message d'erreur

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
+2

Vous ne pouvez pas effectuer d'affectations en dehors des fonctions. Le code exécutable ne peut résider qu'à l'intérieur des fonctions. –

+2

Affecter comme initialiseur comme 'struct node sr = {.b = 48};' – BLUEPIXY

Répondre

3

Vous ne pouvez pas avoir une déclaration qui a besoin de l'exécution d'exécution en dehors main(), à savoir, dans la portée du fichier. Il doit être présent à l'intérieur d'une portée de bloc, à l'intérieur d'une fonction, afin de déterminer lorsque doit être exécuté.

Vous pouvez toutefois utiliser initialization pour que les valeurs initiales soient stockées pour les membres de la variable de type de structure. Quelque chose comme

struct node sr = {'Z', 1}; 

va initialiser sr.a-'Z' et sr.b-1. Si vous n'êtes intéressé que par l'initialisation de membre b, vous avoir besoin designated initializers, comme

struct node sr = { .b = 1 }; 
0

Mettez les lignes suivantes à l'intérieur de la fonction principale().

struct node sr; 
sr.b = 48; 

Pourquoi? Vous ne pouvez pas avoir une instruction qui nécessite une exécution en dehors de main(). Il doit par exemple se trouver dans la portée d'un bloc, à l'intérieur d'une fonction, pour déterminer quand il doit être exécuté.

+0

C'est vrai, mais OP le sait probablement déjà. –

+1

Cette question est à la recherche d'une * explication *, pas simplement pour le code de travail. Votre réponse ne fournit aucun point de vue à l'auteur de la question et peut être supprimée. S'il vous plaît [modifier] pour expliquer ce qui provoque les symptômes observés. –