2010-11-20 7 views
0

gcc 4.5.1 C89Initialiser une structure

compilation avec les indicateurs suivants: -Wall, -Wextra

Je la structure suivante que je suis en train d'initialiser avec les valeurs par défaut. Cependant, je reçois les avertissements suivants:

static struct Device { 
    char *name; 
    char *config; 
} *app = { NULL, NULL }; 

Avertissements:

warning: initialization from incompatible pointer type 
warning: excess elements in scalar initializer 

Cependant, si je fais ce qui suit en déclarant un non-pointeur, je ne reçois pas de problème à savoir

static struct Device { 
     char *name; 
     char *config; 
    } app = { NULL, NULL }; 

Pourquoi est-ce?

Un grand merci pour tous les conseils,

Répondre

2

Vous ne pouvez pas initialiser un pointeur de cette façon. Vous pouvez le faire si:

static struct Device { 
    char *name; 
    char *config; 
} *app = NULL; 

Initialiser un pointeur vers NULL. Un pointeur n'est rien d'autre qu'une adresse mémoire. Vous ne pouvez pas affecter { NULL, NULL } à une adresse de mémoire.

2

Un pointeur n'est pas une structure mais un type simple dont la valeur est une adresse.

  • Si votre variable app est de type pointeur, il peut être initialisé avec NULL mais pas avec les accolades que vous syntaxe utilisez
  • Si la variable app est de type struct Device, vous pouvez utiliser l'initialiseur brace pour fournir une valeur initiale NULL aux name et config champs
2

parce que l'application * est un pointeur si l'initialisation à {NULL, NULL} est incorrecte, vous devez l'initialiser simplement NULL. Dans le cas d'une application, vous avez une instance de variable réelle de la structure, donc vous initialisez les membres de la structure à NULL, c'est OK.

Questions connexes