erreur devrait spécificateur-qualifier-liste avant
J'ai essayé de compiler cet exemple:
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
main(){
size_t distance;
struct x{
int a, b, c;
} s_tr;
distance = offsetof(s_tr, c);
printf("Offset of x.c is %lu bytes\n", (unsigned long)distance);
exit(EXIT_SUCCESS);
}
J'ai une erreur: erreur devrait spécificateur-qualifier-liste avant "s_tr'. ça veut dire quoi? L'exemple que j'ai reçu de: http://publications.gbdirect.co.uk/c_book/chapter9/introduction.html
- Je suis en supposant que votre code dit #include <stdio.h> #include <stdlib.h> #include <stddef.h> au lieu de les inclure inclure inclure ????
- oui, je ne sais pas comment ajouter < ou > j'utilise donc "" pour l'instant. personne ne sait comment les ajouter < ou >?
- Si vous avez un bloc de texte configuré comme code (c'est à dire que vous avez mis en retrait au moins 4 places), alors vous pouvez simplement taper à gauche et à droite de l'angle crochets et ils s'afficheront correctement.
Vous devez vous connecter pour publier un commentaire.
En deuxième lecture, il ressemble à quelqu'un accidentellement introduit une
x
avant la{
. L'original avait probablement un anonyme struct:Vous pouvez réécrire avec un typedef comme:
Voici un code que j'ai utilisé pour me rafraîchir la mémoire, avec les différentes façons de déclarer une struct en C (anonyme, marqués, tapé):
struct x
et la s_tr est tout simplement une erreur de syntaxe. Aussi, en utilisant quelque chose commestruct { int a, b, c; } s_tr;
donne une erreur de compilation, au moins sur ma version de gcc.error: syntax error before ‘s_tr’
C'est avec gcc 4.0.1 (qui est, certes, un peu vieux).Ce code est (autant que je puisse en dire) incorrect. Vous avez besoin d'ajouter un typedef pour
struct x
si vous voulez faire référence à elle comme s_tr. Sinon, s_tr ne veut pas vraiment dire quoi que ce soit (et dans mon cas, n'a même pas de compilation).Cependant, ce n'est pas nécessaire. Vous pourriez vous référer à la structure de x, mais vous devez mettre le mot-clé struct en face d'elle. Comme ceci:
De l'essayer.
Aussi, cette question et de la réponse de la C-FAQ pourrait aider votre compréhension:
Q: Quelle est la différence entre ces deux déclarations?
Une: La première forme déclare une structure de balises; le second déclare un typedef. La principale différence est que la deuxième déclaration est d'un peu plus abstrait type--ses utilisateurs ne savent pas forcément que c'est une structure, et le mot-clé struct n'est pas utilisé lors de la déclaration d'instances:
Structures déclarées avec des balises, d'autre part, doit être définie avec la
forme. [note de bas de page]
(Il est également possible de jouer de deux manières:
C'est légal, si potentiellement obscurcir, d'utiliser le même nom pour l'étiquette et de la définition de type, puisqu'ils vivent dans des espaces de noms distincts. Voir la question 1.29.)
offsetof()
nécessite un type pour le premier argument.Vous passant un objet de type
struct x
.