De C -programmeertaal kunt u gegevens uit een bestand of het toetsenbord met de functies fgetc of getc krijgen . Beide functies nemen de volgende beschikbare personage uit een datastroom en opslaan als een unsigned char . Deze twee functies worden gebruikt voor hetzelfde doel en kunnen door elkaar worden gebruikt wanneer bepaalde voorzorgsmaatregelen worden genomen . Implementatie Er zijn vaak veel legitieme manieren om een taak programmering met behulp van de C language.for instantie uit te voeren, zowel fgetc en getc zijn onderdeel van de standaard C include file , " stdio.h " . Fgetc is geïmplementeerd als een C - taal -functie . Getc , anderzijds , kan worden gevonden als een functie of als een macro . Bijvoorbeeld , kunt u vinden getc opgenomen in de " stdio.h " bestand als de volgende code : # define getc ( f ) ( ( - ( ( f ) - > level ) > = 0 ) ( unsigned char ) ( + + ( f ) - > curp ) [ -1 ] : ? _fgetc ( f ) ) op Wanneer de C preprocessor ontleedt uw broncode en vindt de identifier " getc " met parameters binnen haakjes , het voegt deze parameters in het vervangende token dat getc definieert . Zolang de parameters zijn niet uitdrukkingen , zal de macro altijd terug hetzelfde resultaat als fgetc . Optreden getc wordt soms uitgevoerd als een macro om de prestaties van applicaties te verhogen door het verhogen van de snelheid van uitvoering en het verminderen van de verwerking overhead . Wanneer u fgetc gebruiken in een programma , zijn de processor en het geheugen middelen besteed volgen van de uitvoering van de functie van instructies , het register variabelen en gemaakt als het eigenlijke werk dat gedaan moet worden om een teken terug te keren uit de datastroom . Sinds de getc macro wordt samengesteld inline voordat het programma ooit loopt , is er geen functie overhead en uw aanvraag kan sneller lopen . Side Effects Soms de voorkeur fgetc plaats van getc gebruiken om fouten veroorzaakt door macro uitzetting bijwerkingen te voorkomen . Bijwerkingen kunnen optreden wanneer een getc macro wordt gegeven parameters die uitdrukkingen nogal variabelen zijn . Oneigenlijk macro expansie kan leiden meerdere pogingen om de datastroom die onverwachte resultaten kan opleveren . Dit kan voorkomen worden door fgetc plaats of de expressie eerste evaluatie , vervolgens langs de resulterende variabele of aanwijzer getc . Cross compatibiliteit fgetc als functie gevonden in alle C-compilers die voldoen aan de American National Standards Institute of ANSI C standaard . Als het gaat om getc echter dingen zijn vaak niet zo standaard . Soms wordt getc gedefinieerd als gewoon als een andere naam voor fgetc : # define getc ( __stream ) fgetc ( __stream ) op Wanneer getc is geïmplementeerd als een functie , maar je tegelijkertijd onderhouden compatibiliteit taal met andere C-compilers en elimineren van de mogelijkheid van macro bijwerkingen .
|