Forskjellen mellom fgetc og getc

Forskjellen mellom fgetc og getc


Programmeringsspråket C lar deg hente data fra en fil eller tastaturet ved hjelp av funksjoner fgetc eller getc. Begge funksjonene ta den neste tilgjengelige tegn fra en datastrøm og lagre det som en usignert røye. Disse to funksjoner blir brukt til samme formål, og kan brukes om hverandre dersom visse forhåndsregler tas.

Gjennomføring

Det er ofte mange legitime måter å utføre en programmering oppgave ved hjelp av C language.For eksempel, både fgetc og getc er en del av standard C include file "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) -> nivå)> = 0) (unsigned char) (++ (f) -> curp) [- 1]:? _fgetc (f))

Når C preprosessor analyserer kildekoden og finner identifikator "getc" med parametre vedlagt i parentes, det setter disse parametrene inn i erstatning token som definerer getc. Så lenge parametrene er ikke uttrykk, vil makroen alltid returnere samme resultat som fgetc.

Opptreden

Getc er noen ganger implementert som en makro for å øke yteevnen for applikasjoner ved å øke gjennomføring hastighet og redusere behandling overhead. Når du bruker fgetc i et program, ressurser prosessor og minne tilbrakte sporing gjennomføringen av funksjons instruksjoner, til registervariabler opprettet samt selve arbeidet som må gjøres 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 løpe fortere.

Bivirkninger

Noen ganger er det foretrukket å anvende fgetc istedenfor getc for å unngå feil forårsaket av makro ekspansjon bivirkninger. Bivirkninger kan oppstå når en getc makro er gitt parametere som er uttrykk snarere variabler. Feilaktig makro utvidelse kan føre til flere forsøk på å få tilgang til datastrømmen som kan gi uventede resultater. Dette kan forhindres ved hjelp av fgetc i stedet, eller ved evaluering av uttrykket først, og deretter å føre den resulterende variabel eller pekeren til getc.

Cross kompatibilitet

Fgetc som en funksjon finnes i alle C-kompilatorer som er i samsvar med American National Standards Institute eller ANSI C standarden. Når det gjelder getc, men ting er ofte ikke så standarden. Noen ganger er getc definert som rett og slett som et annet navn for fgetc:

definere getc (stream) fgetc (stream)

Når getc er implementert som en funksjon, men man samtidig opprettholder språk kompatibilitet med andre C-kompilatorer og eliminere muligheten for makro bivirkninger.