programspråket C kan du hämta data från en fil eller tangentbordet använder funktioner fgetc eller getc . Båda funktionerna tar nästa tillgängliga tecken från en dataström och lagra den som en unsigned char . Dessa två funktioner används för samma ändamål och kan användas omväxlande om vissa försiktighetsåtgärder vidtas . Genomförande
p Det finns ofta många legitima sätt att utföra en programmeringsuppgift med C language.foren instans , både fgetc och getc är en del av standarden C inkluderar fil , " stdio.h " . Fgetc är implementerad som en C- språk funktion. Getc , å andra sidan , kan återfinnas som en funktion eller som ett makro . Till exempel kan du hitta getc ingår i " stdio.h " filen som följande kod :
# define getc ( f) ( ( - ( ( f ) - > level ) > = 0 ) ( unsigned char ) ( + + ( f ) - > curp ) [ -1 ] : ? _fgetc ( f ) ) katalog
När C preprocessor tolkar din källkod och hittar identifieraren " getc " med parametrar inneslutna inom parentes , infogas dessa parametrar i ersättning token som definierar getc . Så länge parametrarna är inte uttryck , kommer makrot återvänder alltid till samma resultat som fgetc .
Prestanda
getc ibland genomförs som ett makro för att öka programmets prestanda genom att öka exekveringshastighet och minska handläggningstiden overhead . När du använder fgetc i ett program, processor och minne resurser spenderas spåra genomförandet av funktionens instruktioner skall registret variabler som skapats, det faktiska arbete som behöver göras för att returnera ett tecken från dataströmmen . Eftersom getc makrot sammanställs inline innan programmet någonsin körs , det finns ingen funktion overhead och din applikation kan köras snabbare .
Side Effects
Ibland föredras att använda fgetc istället för getc för att undvika fel som orsakas av makroeffekter expansionssida . Biverkningar kan uppstå när en getc makro ges parametrar som är uttryck snarare variabler . Felaktig makroexpansion kan resultera flera försök att komma åt den dataström som kan ge oväntade resultat . Detta kan förhindras genom att använda fgetc stället eller genom att utvärdera uttrycket först och sedan passerar den resulterande variabeln eller pekare till getc . Som en funktion är Addera Cross Kompatibilitet
fgetc finns i alla C-kompilatorer som överensstämmer med American National Standards Institute eller ANSI C standarden . När det kommer till getc emellertid saker är ofta inte så vanliga . Ibland är getc definieras så enkelt som ett annat namn för fgetc :
# define getc ( __stream ) fgetc ( __stream ) katalog
När getc implementeras som en funktion , dock upprätthålla du samtidigt språket kompatibilitet med andra C-kompilatorer och eliminera risken för makro biverkningar .