Kann nicht kompiliert werden, mit void-variable in C
test.c
int main () {
void a;
return 0;
}
Ich benutze gcc zu kompilieren, aber es gibt mir eine Fehlermeldung:
Fehler: variable oder Feld " a " für nichtig erklärt
Was ich gelesen hier,
Ich dachte, ich kann erklären, leere variable ohne problem.
- Sie können einen Zeiger auf void (
void *
), aber dort ist kein solches Ding wie eine leere variable. - Eine variable vom Typ
void
ist nicht etwas, das ich sehen würde, wie mit jeder Verwendung. Im Allgemeinen, void bedeutet, dass es nichts gibt, z.B. eine Funktion, die void zurückgibt zurückgibt, normalerweise aber nicht passieren etwas an den Aufrufer zurück. In einem ganz anderen Sinn, einen Zeiger auf void bedeutet nur, dass der Typ wurde nicht angegeben, was der Zeiger zeigt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Ihre link-states:
Dies bedeutet, dass zwar syntaktisch korrekt, ein
void
Erklärung ist nicht sinnvoll, etwas, das ist, warum GCC könnte das als einen Fehler. Auch wenn es zusammenstellen würde, werden Sie nicht in der Lage, etwas zu tun mit der variable, so dass ich denke, Ihre Frage ist nur im Zusammenhang mit Tests für dieses Verhalten.In der Tat
void
ist nützlich, einfach wenn wir reden, über Zeiger (void*
), da es Ihnen zu erklären, einen generischen Zeiger, ohne Angabe des Typs.Nein, aber Sie kann deklarieren Sie eine void-Zeiger:
void *
. Einvoid *
können, halten Sie eine beliebige Objekt-Zeiger.[aber]
Obwohl das Buch besagt, dass
void a;
ist eine gültige Anweisung, ich glaube nicht, dass es je gegeben hat-standards kompatibel. That being said, die erste Ausgabe des Buches wurde von 1987, also könnte es auch sein, carry-over von älteren Implementierungen von GCC.void *x;
ist eine gültige Anweisung.void x;
ist keine gültige Anweisung.Eine Funktion zurückgibt, die einen Zeiger auf void ist ebenfalls gültig.
Warum ist das so?
Wenn eine variable deklariert wird in einer Funktion der compiler reserviert einen Speicherplatz für eine variable. Aber wenn eine variable vom Typ void, der compiler nicht wissen, wie viele bytes zu reservieren für diese variable. Damit dies funktioniert nicht für den compiler.
Jedoch wird der Zeiger auf void ist anders. Ein pointer vom Typ void, die gelesen werden können wie ein int oder ein double oder ein float oder ein kurz-oder ein char in der Zeit zu Lesen. In diesem Fall explizite typecasting erforderlich oder automatische Typ-Förderung erfolgt durch den compiler.
z.B.
Ein wichtiger Hinweis: C nicht die direkte Umwandlung von Dereferenzierung eines void-Zeiger.
Was ich durch dieses bedeute, ist, dass Sie dies nicht tun:
Konzeptionell, das macht auch Sinn. Aber C nicht zulassen.