Wie kann man einen FILE * Pointer in C / C ++ korrekt deklarieren und benutzen?

8

Was ist der richtige Weg, um einen FILE * Pointer in C / C ++ zu deklarieren und zu benutzen? Sollte es global oder lokal erklärt werden? Kann jemand ein gutes Beispiel zeigen?

    
Jonathan Leffler 26.02.2009, 06:40
quelle

5 Antworten

17

Es spielt keine Rolle, ob es lokal oder global ist. Der Umfang des Dateizeigers hat nichts mit seiner Verwendung zu tun.

Im Allgemeinen ist es eine gute Idee, globale Variablen so weit wie möglich zu vermeiden.

Hier ist ein Beispiel, das zeigt, wie man von input.txt nach output.txt kopiert:

%Vor%     
paxdiablo 26.02.2009 06:45
quelle
4

Es ist nur ein gewöhnlicher Zeiger wie jeder andere.

%Vor%     
Crashworks 26.02.2009 06:47
quelle
1

Hier ist der erste Treffer bei Google für "file io in c"

Ссылка

Hier ist der dritte Hit von gamedev mit mehr C ++ Schrägstrich

Ссылка

Sie deklarieren den Zeiger in dem Bereich, den Sie benötigen.

    
Andrew Barrett 26.02.2009 06:45
quelle
1
%Vor%

Sie dürfen, wie jede andere Variable auch, globale Dateihandles deklarieren, aber das ist vielleicht nicht empfehlenswert.

Das ist die C-Art. C ++ kann das verwenden, aber ich denke, es gibt eine C ++ freundliche Art, es zu tun. Als Anmerkung hasse ich es, wenn Fragen mit C / C ++ markiert sind, weil C und C ++ nicht die gleiche Sprache sind und nicht gleich funktioniert. C ++ hat viele verschiedene Möglichkeiten, Dinge zu tun, die C nicht hat, und sie können für Sie im Kontext von C ++ einfacher sein, sind aber nicht gültig C. Während dies für beide Sprachen funktioniert, ist es nicht das, was Sie tun Wollen Sie, wenn Sie überwiegend C ++ verwenden.

BEARBEITEN: Es wurde eine Fehlerüberprüfung hinzugefügt. Verwenden Sie immer eine Fehlerüberprüfung in Ihrem Code.

    
Chris Lutz 26.02.2009 06:47
quelle
0

Beachten Sie zunächst, dass ein Dateizeiger (und die zugehörige zugewiesene Struktur) auf den lower level () read () write () Aufrufen basiert. Der zugehörige Dateideskriptor (von fileno (file_pointer) erhalten, ist das am wenigsten interessante Ding, aber etwas, das Sie Ihren Bereich mit sehen sollten.)

Wenn Sie einen Dateizeiger in einem Modul als global deklarieren wollen, ist es normalerweise eine sehr gute Idee, ihn statisch zu halten (in diesem Modul / Objekt enthalten). Manchmal ist dies etwas einfacher als das Speichern in einer Struktur, die von Funktion zu Funktion übergeben wird, wenn Sie etwas in Eile schreiben müssen.

Zum Beispiel (schlecht)

%Vor%

Besser gemacht als:

%Vor%

NUR, Sie brauchen mehrere Module, um auf diesen Zeiger zugreifen zu können. In diesem Fall ist es besser, Sie in eine Struktur zu setzen, die herumgereicht werden kann.

Wenn es nur in einem Modul benötigt wird, sollten Sie es in main () deklarieren und anderen Funktionen erlauben, einen Dateizeiger als Argument zu akzeptieren. Also, es sei denn, Ihre Funktionen innerhalb des Moduls haben so viele Argumente, dass ein anderer unerträglich wäre. Es gibt (normalerweise) keinen Grund, einen Dateizeiger global zu deklarieren.

Einige Logging-Bibliotheken machen das, was mir egal ist ... besonders wenn es sich um wiederkehrende Funktionen handelt. Vereinheitlichen Sie den monolithischen Namensraum von C:)

    
Tim Post 26.02.2009 07:49
quelle

Tags und Links