Fehler erwartet specifier-qualifier-list vor
Habe ich versucht zu kompilieren dieses Beispiels:
#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);
}
Ich bekam eine Fehlermeldung: Fehler erwartet specifier-qualifier-list before 's_tr'. was bedeutet es? Das Beispiel hab ich von: http://publications.gbdirect.co.uk/c_book/chapter9/introduction.html
Ich nehme an, dein code sagt #include <stdio.h> #include <stdlib.h> #include <stddef.h> statt include include include ????
ja, ich weiß nicht, wie Sie auf hinzufügen < oder > also ich benutze "" für jetzt. weiß jemand, wie man hinzufügen < oder >?
Wenn Sie einen block von text als code (d.h. Sie eingezogen haben es mindestens 4 Leerzeichen), dann können Sie geben Sie einfach die linken und rechten Spitzen Klammern und werden Sie korrekt angezeigt.
ja, ich weiß nicht, wie Sie auf hinzufügen < oder > also ich benutze "" für jetzt. weiß jemand, wie man hinzufügen < oder >?
Wenn Sie einen block von text als code (d.h. Sie eingezogen haben es mindestens 4 Leerzeichen), dann können Sie geben Sie einfach die linken und rechten Spitzen Klammern und werden Sie korrekt angezeigt.
InformationsquelleAutor | 2009-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf die zweite Lesung, es sieht aus wie jemand versehentlich eingefügt wurde, wird
x
vor der{
. Das original hatte wohl eine anonyme struct:Schreiben Sie es mit einem typedef wie:
Hier ist etwas code, den ich verwendet, um mein Gedächtnis aufzufrischen, mit den verschiedenen Möglichkeiten, die Deklaration einer struct in C (anonym, markiert und eingegeben):
Die x ist nicht falsch, es ist der name der Struktur ist. So, in der ursprünglichen Frage, der Typ der Struktur struct ist
struct x
und die s_tr ist einfach ein syntax Fehler. Auch, mit so etwas wiestruct { int a, b, c; } s_tr;
gibt einen compiler-Fehler, zumindest auf meiner version von gcc.Dochte: Welche Art von Fehler bedeutet gcc-Bericht? Mein gcc denkt, es ist in Ordnung.
error: syntax error before ‘s_tr’
Dies ist mit gcc 4.0.1 (das ist, zugegeben, ein wenig alt).Dochte: Das ist genau, wie den Kernighan & Ritchie Buch erklärt Strukturen. Vielleicht ist gcc 4 nicht zulassen, dass die Erklärung von Strukturen innerhalb einer Funktion.
InformationsquelleAutor Andomar
Dieser code ist (soweit ich das sagen kann) falsch. Benötigen Sie ein typedef zu
struct x
wenn Sie wollen, bezeichnen Sie als s_tr. Ansonsten s_tr nicht wirklich etwas bedeuten (und in meinem Fall, nicht selbst kompiliert).Dies ist jedoch nicht erforderlich. Sie könnte beziehen sich auf die Struktur als x, aber Sie haben, um das struct-Schlüsselwort vor. Wie diese:
InformationsquelleAutor Paul Wicks
Versuchen.
Auch, diese Frage und Antwort aus der C-FAQ könnte helfen, Ihre Verständnis:
Q: Was ist der Unterschied zwischen diesen beiden Erklärungen?
A: Die erste form erklärt ein Struktur-tag; der zweite erklärt ein typedef. Der wesentliche Unterschied ist, dass die zweite Erklärung ist eine etwas abstrakte Art-seine Nutzer nicht unbedingt wissen, dass es eine Struktur ist, und das Schlüsselwort struct wird nicht verwendet bei der Deklaration der Instanzen:
Deklarierte Strukturen mit tags, auf der anderen Seite muss definiert werden, mit der
form. [Fußnote]
(Es ist auch möglich zu spielen es beide Möglichkeiten:
Es ist legal, wenn potenziell verschleiern, verwenden die gleichen Namen für das tag ein, und die Typdefinition, seitdem Leben Sie in getrennten namespaces. Siehe Frage 1.29.)
InformationsquelleAutor Robert S. Barnes
offsetof()
erfordert eine Typ für das erste argument.Sie übergeben es einem Objekt Typ
struct x
.InformationsquelleAutor pmg