6 Stimmen

C DATEI-Zeiger, warum nicht einfach den DATEI-Typ direkt verwenden?

Ich weiß, dass wir in C einen Zeiger auf den Dateityp FILE deklarieren müssen. Warum können wir nicht einfach den Dateityp FILE direkt verwenden, anstatt einen Zeiger auf FILE zu verwenden?

FILE *file;
FILE file; // Warum können wir das nicht stattdessen verwenden?

5voto

Kerrek SB Punkte 445528

Eine DATEI ist eine Ressource. Eine bestimmte Datei existiert nur einmal und kann sich nicht bewegen. Dies macht eine DATEI ungeeignet für die Wertsemantik von C. Wenn Sie eine Ressource haben, verweisen Sie auf die Ressource, indem Sie einen Zeiger auf die Ressource weitergeben, was die C-API macht.

(Darüber hinaus ist die Definition von DATEI privat für die Implementierung und nicht Bestandteil des Standards, was ein entscheidender Freiheitsgrad ist, den Sie Implementierern gewährleisten möchten.)

2voto

M.M Punkte 134165

C hatte ursprünglich nicht die Fähigkeit, Strukturen per Wert zu übergeben; dies wurde in ANSI C89 hinzugefügt.

FILE hätte in K&R C nicht funktioniert. Da FILE * genauso gut funktioniert, bestand kein Bedarf oder Vorteil darin, die Funktionen neu zu gestalten, um mit FILE anstelle von FILE * zu arbeiten, als ANSI C erstellt wurde.

Wie Kerrek SB jedoch feststellt, ein weiterer Vorteil von FILE * ist, dass FILE als typedef'd struct Tag verwendet werden könnte und dies dem Implementierer die Freiheit lässt, sie auf die bestmögliche Weise zu implementieren, ohne dabei funktionierende Programme zu beeinträchtigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X