déclaration ne rien déclarer : avertissement?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
struct emp
{
struct address
{
int a;
};
struct address a1;
};
}
Ce code affiche un avertissement:-
avertissement : déclaration ne rien déclarer (activé par défaut)
Où, comme le montre le code suivant pas d'avertissement
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
struct emp
{
struct address
{
int a;
}a1;
};
}
Pourquoi un "avertissement" est affiché dans le premier code?
u peut pls envoyer votre comprennent aussi des déclarations et des macros si u utilisé?
voir la modifier
Est votre struct vide comme vous le montre?
ya mais les données membres de ne pas faire toute la différence dans ce cas
S'il vous plaît ajouter certains membres de faire de la question de plus en plus clair pour les gens de répondre.
voir la modifier
Est votre struct vide comme vous le montre?
ya mais les données membres de ne pas faire toute la différence dans ce cas
S'il vous plaît ajouter certains membres de faire de la question de plus en plus clair pour les gens de répondre.
OriginalL'auteur kevin gomes | 2014-02-06
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle le compilateur est en montrant l'avertissement est parce qu'il ne voit pas un nom pour la variable de type
address
vous avez défini pour laemp
struct, même si vous ne déclarer quelque chose à l'aide deaddress
sur la ligne suivante, mais je suppose que le compilateur n'est pas assez intelligent pour comprendre ça.Comme vous l'a montré, ce qui produit un avertissement:
Mais pas cette:
Ou ceci:
La
struct emp {}
ne pas afficher les avertissements depuis cette déclaration n'est pas à l'intérieur d'une structure de définition de bloc. Si vous ne l'avez mis à l'intérieur de l'une de ces puis le compilateur affiche un avertissement. La suite montrera deux mises en garde:OriginalL'auteur juan.facorro
La raison de l'avertissement est affiché, c'est que le premier extrait n'est pas bon, C - il a une violation de contrainte que conforme aux normes compilateur C doit produire un diagnostisc message pour. Il viole la C11 6.7.2.1p2:
Ce qui signifie qu'il est correct d'écrire
depuis l'intérieur
struct
déclare un anonyme structure, c'est à dire qu'il n'est pas nommé.Mais dans votre exemple, le
struct address
a un nom -address
- et donc, il doit ont une déclaration de la liste après l'accolade de fermeture - déclaration de la liste, par exemplea1
comme dans votre exemple, ou plus complexefoo, *bar, **baz[23][45]
.OriginalL'auteur Antti Haapala
La syntaxe de définition de la structure est:
Si vous ajoutez un identifiant juste après l'accolade fermante, vous êtes à la déclaration d'une variable avec que défini struct.
Dans votre premier exemple, le compilateur considère la
address
struct comme type de membre. c'est comme si vous avez écrit:Mais dans le deuxième exemple que vous avez spécifié le nom du membre:
Et voici un exemple de l'avertissement: http://ideone.com/KrnYiE.
OriginalL'auteur rullof