Il linguaggio di programmazione C consente di ottenere i dati da un file o la tastiera si utilizzano le funzioni fgetc o getc . Entrambe le funzioni prendono il successivo carattere disponibile da un flusso di dati e lo immagazzinano come un unsigned char . Queste due funzioni sono usate per lo stesso scopo e si possono usare indifferentemente se si prendono alcune precauzioni . Attuazione
Spesso ci sono molti modi legittimi per eseguire un compito di programmazione utilizzando l'istanza language.For C , sia fgetc e getc sono parte dello standard C includono file " stdio.h " . Fgetc è implementato come una funzione C - lingua . Getc , d'altra parte, può essere trovata come una funzione o come macro . Ad esempio, è possibile trovare getc incluso nel file " stdio.h ", come il seguente codice:
# define getc ( f) ( ( - ( ( f) - > Livello ) > = 0 ) ( unsigned char ) ( + + ( f) - > CURP ) [ -1 ] : _fgetc ( f ) ) per
Ogni volta che il preprocessore C analizza il codice sorgente e trova l'identificatore " getc " ? con parametri racchiusi tra parentesi , inserisce i parametri nel token di sostituzione che definisce getc . Fino a quando i parametri non sono espressioni , la macro restituisce sempre lo stesso risultato fgetc .
Prestazioni
GETC volte è implementata come una macro per aumentare le prestazioni delle applicazioni aumentando la velocità di esecuzione e riducendo il carico di elaborazione . Quando si utilizza fgetc in un programma , le risorse di memoria e processore sono spesi tracciamento l'esecuzione delle istruzioni della funzione , le variabili di registro creati 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 c'è sovraccarico funzione e l'applicazione potrebbe funzionare più velocemente .
Side Effects
volte è preferibile utilizzare fgetc anziché getc per evitare errori causati da effetti collaterali macro espansione . Gli effetti collaterali possono verificarsi quando una macro getc è data parametri che sono espressioni piuttosto variabili . Espansione di macro improprio può provocare molteplici tentativi di accesso al flusso di dati che può produrre risultati imprevisti . Ciò può essere evitato utilizzando fgetc invece o valutando l'espressione , poi passando la variabile risultante o puntatore a getc .
Croce Compatibilità
fgetc come funzione è presente in tutti i compilatori C conformi alla American National Standards Institute o standard 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 :
# define getc ( __stream ) fgetc ( __stream ) per
Quando getc è implementato come una funzione, tuttavia, è allo stesso tempo mantenere la compatibilità con la lingua con altri compilatori C e di eliminare la possibilità di effetti collaterali macro .