Die Programmiersprache C können Sie Daten aus einer Datei oder der Tastatur mit den Funktionen fgetc oder getc bekommen . Beide Funktionen nehmen das nächste verfügbare Zeichen aus einem Datenstrom und speichern Sie es als ein unsigned char . Diese beiden Funktionen sind für den gleichen Zweck verwendet werden und können synonym zu verwenden, wenn bestimmte Vorkehrungen getroffen werden. Implementation
Oft gibt es viele Möglichkeiten, um eine legitime Aufgabe in der Programmierung mit dem C language.For Instanz durchzuführen , sind beide fgetc und getc Teil der Standard-C- Include-Datei " stdio.h " . Fgetc wird als C- Sprache -Funktion implementiert. Getc , auf der anderen Seite , kann als eine Funktion oder als ein Makro ermittelt werden. Zum Beispiel können Sie in der getc " stdio.h " Datei den folgenden Code enthalten :
# define getc ( f ) (( - (( f) -> Ebene ) > = 0) ( unsigned char ) (+ + ( f) -> CURP ) [-1] : ? _fgetc (f))
Wenn der C-Präprozessor den Quellcode analysiert und findet die Kennung " getc " mit Parametern in Klammern , fügt es die Parameter in das Ersatz -Token, das getc definiert . Solange die Parameter nicht Ausdrücke , wird das Makro immer das gleiche Ergebnis wie fgetc .
Leistung
getc wird manchmal als Makro implementiert, um die Leistung zu steigern Anwendung durch die Erhöhung der Ausführungsgeschwindigkeit und die Verringerung der Verarbeitungs-Overhead . Wenn Sie fgetc in einem Programm verwenden , werden Prozessor-und Speicherressourcen verbrachte die Verfolgung der Ausführung der Funktion den Anweisungen , die Register -Variablen sowie die eigentliche Arbeit , die getan werden , um ein Zeichen aus dem Datenstrom zurückgeben werden muss erstellt . Da die getc Makro inline kompiliert wird , bevor das Programm überhaupt läuft , gibt es keine Funktion Overhead und Ihre Anwendung kann schneller laufen.
Side Effects
Manchmal ist es vorzugsweise wird fgetc statt getc zu verwenden, um Fehler durch den Makroerweiterung Nebenwirkungen zu vermeiden. Nebenwirkungen können auftreten, wenn ein Makro getc Parameter, die Ausdrücke eher Variablen sind gegeben . Unsachgemäße Makroerweiterung führen kann mehrere Versuche , um den Datenstrom , die zu unerwarteten Ergebnissen führen zugreifen können. Dies kann durch Verwendung fgetc statt oder durch die Auswertung des Ausdrucks erste verhindert werden , dann das sich ergebende variable oder Zeiger auf getc .
Kreuz Kompatibilität
fgetc als eine Funktion gefunden in allen C- Compilern , die mit dem American National Standards Institute ANSI C oder Standard entsprechen . Wenn es um getc kommt , jedoch sind die Dinge oft nicht so Standard. Manchmal getc wie wird einfach als ein anderer Name für fgetc definiert: # define
getc ( __stream ) fgetc ( __stream )
getc als Funktion implementiert ist, Sie jedoch gleichzeitig pflegen Sprache Kompatibilität mit anderen C-Compiler und die Beseitigung der Möglichkeit der Makro Nebenwirkungen.