Unterschied zwischen Fgetc und getc

October 11

Die Programmiersprache C können Sie Daten aus einer Datei oder die Tastatur mithilfe der Funktionen Fgetc oder Getc zu erhalten. Beide Funktionen nehmen das nächste verfügbare Zeichen aus dem Datenstream und speichern Sie es als ein unsigned Char. Diese beiden Funktionen werden für den gleichen Zweck verwendet und können sein Einsatz austauschbar, wenn bestimmte Vorsichtsmaßnahmen getroffen werden.

Umsetzung

Oft gibt es viele legitime Möglichkeiten eine Programmieraufgabe mit der C-Sprache durchführen. Zum Beispiel Fgetc und Getc sind Teil der Standard C umfassen Datei, "stdio.h". Fgetc ist als eine Funktion der Programmiersprache C implementiert. Getc, kann auf der anderen Seite als eine Funktion oder ein Makro gefunden werden. Beispielsweise finden Sie in der Datei "stdio.h", wie der folgende Code enthalten Getc:

getc(f) definieren ((--((f) -> Ebene) > = 0)? (unsigned Char) (++ f -> Curp) [-1]: _fgetc (f)) Immer wenn der C-Präprozessor Ihren Quellcode analysiert und den Bezeichner "Getc" mit Parameter in Klammern eingeschlossen findet, fügt es diese Parameter in das Ersatztoken, das Getc definiert. Solange die Parameter nicht Ausdrücke sind, wird das Makro immer dasselbe Ergebnis wie Fgetc zurück.

Leistung

Getc wird manchmal als Makro um Anwendungs-Performance zu steigern, durch Erhöhung der Ausführungsgeschwindigkeit und Verringerung der Verarbeitungsaufwand implementiert. Wenn Sie Fgetc in einem Programm verwenden, werden Prozessor- und Speicherressourcen verbracht verfolgen die Ausführung der Funktion Anweisungen, die Register-Variablen erstellt sowie die aktuelle Arbeit, die getan werden, um ein Zeichen aus dem Datenstream zurückgeben muss. Da das Makro Getc kompilierte Inline ist bevor das Programm überhaupt läuft, gibt es keine Funktion-Overhead und Ihre Anwendung möglicherweise schneller ausgeführt.

Nebenwirkungen

Manchmal ist es vorzuziehend, Fgetc statt Getc zu benutzen, um durch Makro Ausbau Nebenwirkungen verursacht Fehler zu vermeiden. Nebenwirkungen können auftreten, wenn ein Makro Getc Parameter angegeben ist, die Ausdrücke sind eher Variablen. Unsachgemäße Makroerweiterung möglicherweise mehrere Versuche, den Datenstrom zugreifen, der zu unerwarteten Ergebnissen führen kann. Dies kann verhindert werden, mithilfe von Fgetc stattdessen oder durch Auswertung des Ausdrucks zuerst, dann der resultierenden Variablen oder Zeiger an Getc übergeben.

Cross-Kompatibilität

Fgetc als Funktion findet sich in den C-Compiler, die das American National Standards Institute oder ANSI C-standard entsprechen. Wenn es darum geht, Getc, jedoch sind oft nicht Dinge also standard. Getc wird manchmal als einfach wie ein anderer Name für Fgetc definiert:

Getc definieren (Stream) Fgetc (Stream) Wenn Getc als Funktion implementiert wird, Sie jedoch gleichzeitig pflegen Sprache Kompatibilität mit anderen C-Compilern und Beseitigung der Möglichkeit Makro Nebenwirkungen.