C programmeringsspråk lar deg hente data fra en fil eller tastaturet ved hjelp av funksjoner fgetc eller getc . Begge funksjonene ta neste tilgjengelige tegn fra en datastrøm og lagre det som en usignert røye. Disse to funksjonene brukes for det samme formål , og kan brukes om hverandre dersom visse forhåndsregler tas . Gjennomføring
p Det er ofte mange legitime måter å utføre et programmeringsspråk oppgave med C language.For eksempel, både fgetc og getc er en del av standard C inkluderer fil, " stdio.h " . Fgetc er implementert som en C - språk funksjon . Getc , på den annen side , kan finnes som en funksjon eller som en makro . For eksempel kan du finne getc inkludert i " stdio.h "-filen som følgende kode :
# define getc ( f) ( ( - (( f) - > level ) > = 0 ) ( unsigned char ) ( + + ( f) - > curp ) [ -1 ]: ? _fgetc ( f) )
Når C preprocessor analyserer kildekoden og finner identifikator " getc " med parametere omsluttet innenfor parenteser , setter den de parametere inn i erstatning token som definerer getc . Så lenge parametrene er ikke uttrykk , vil makroen alltid returnere det samme resultatet som fgetc .
Resultatutvikling
Getc er noen ganger implementert som en makro for å øke programmets ytelse ved å øke gjennomføring hastighet og redusere behandlingen overhead. Når du bruker fgetc i et program , er prosessor og minne ressurser brukt sporing gjennomføringen av funksjon instruksjoner , de register variabler opprettet samt selve arbeidet som må gjøres for å returnere en karakter fra datastrømmen . Siden getc makro er kompilert inline før programmet noensinne går , er det ingen funksjon overhead og søknaden kan kjøre fortere.
Side Effects
Noen ganger er det er å foretrekke å bruke fgetc istedenfor getc for å unngå feil forårsaket av makro- ekspansjons bivirkninger. Bivirkninger kan oppstå når en getc makro er gitt parametere som er uttrykk snarere variabler . Uriktig makro ekspansjon kan føre flere forsøk på å få tilgang til datastrømmen som kan gi uventede resultater . Dette kan forebygges ved å bruke fgetc stedet eller ved å evaluere uttrykket først, deretter den resulterende variabel eller peker til getc .
Cross Kompatibilitet
fgetc som en funksjon er finnes i alle C-kompilatorer som samsvarer med American National Standards Institute eller ANSI C standard . Når det gjelder getc imidlertid ting er ofte ikke så standarden. Noen ganger er getc definert som rett og slett som et annet navn for fgetc : en
# define getc ( __stream ) fgetc ( __stream )
Når getc er implementert som en funksjon , men du samtidig opprettholde språk kompatibilitet med andre C-kompilatorer og eliminere muligheten for makro bivirkninger.