Differenza tra fgetc e getc

August 19

Differenza tra fgetc e getc


Il linguaggio di programmazione C consente di ottenere i dati da un file o la tastiera utilizzando il fgetc funzioni o getc. Entrambe le funzioni assumono il carattere successivo disponibile da un flusso di dati e memorizzare come un unsigned char. Queste due funzioni sono utilizzati per lo stesso scopo e possono essere utilizzati in modo intercambiabile se vengono prese alcune precauzioni.

Implementazione

Ci sono spesso molti modi legittimi per eseguire un compito di programmazione utilizzando l'istanza C language.For, sia fgetc e getc sono parte dello standard C include file, "stdio.h". Fgetc è implementato come una funzione C-linguaggio. Getc, d'altra parte, può essere trovato come una funzione o come macro. Ad esempio, si possono trovare getc incluso nel file "stdio.h", come il seguente codice:

definire getc (f) ((- ((f) -> Livello)> = 0) (unsigned char) (++ (f) -> CURP) [- 1]:? _fgetc (f))

Ogni volta che il preprocessore C analizza il codice sorgente e trova l'identificatore "getc" con i parametri racchiusi tra parentesi, si inserisce in quei parametri il token di sostituzione che definisce getc. Fino a quando i parametri non sono espressioni, la macro restituirà sempre lo stesso risultato di fgetc.

Prestazione

GETC a volte è implementata come una macro per incrementare le prestazioni delle applicazioni, aumentando la velocità di esecuzione e la riduzione elaborazione overhead. Quando si utilizza fgetc in un programma, risorse del processore e la memoria sono spesi monitoraggio l'esecuzione delle istruzioni della funzione, le variabili di registro create così come il lavoro effettivo che deve essere fatto per restituire un carattere dal flusso di dati. Dal momento che la macro getc è compilato in linea prima che il programma viene eseguito sempre, non vi è alcuna funzione in testa e l'applicazione può correre più veloce.

Effetti collaterali

A volte è preferibile utilizzare fgetc anziché getc per evitare errori causati da effetti collaterali espansione macro. Gli effetti collaterali possono verificarsi quando una macro getc è dato parametri che sono le espressioni piuttosto variabili. Improprio macro espansione può provocare molteplici tentativi di accesso al flusso di dati che può produrre risultati imprevisti. Ciò può essere evitato utilizzando invece fgetc o valutando l'espressione prima, poi passando la variabile risultante o puntatore a getc.

Compatibilità Croce

Fgetc come una funzione si trova in tutti i compilatori C che conformi allo standard American National Standards Institute o ANSI C. Quando si tratta di getc, però, le cose spesso non sono così standard. A volte, getc è definito semplicemente come un altro nome per fgetc:

definire getc fgetc (flusso) (stream)

Quando getc è implementata come una funzione, tuttavia, si mantiene allo stesso tempo la compatibilità lingua con altri compilatori C ed eliminare la possibilità di effetti collaterali macro.