A linguagem de programação C permite-lhe obter dados de um arquivo ou o teclado usando o fgetc funções ou getc . Ambas as funções dar o próximo personagem disponível a partir de um fluxo de dados e armazená-lo como um unsigned char . Estas duas funções são usados para a mesma finalidade e pode ser utilizar indiferentemente se que certas precauções sejam tomadas . Implementação
muitas vezes há muitas maneiras legítimas para realizar uma tarefa de programação usando a instância C language.for , tanto fgetc e getc são parte do padrão C arquivo de inclusão , " stdio.h " . Fgetc é implementado como uma função da linguagem C . GETC , por outro lado , podem ser encontradas como uma função de ou como uma macro . Por exemplo , você pode encontrar getc incluído no arquivo " stdio.h " como o seguinte código: #
getc define ( f) ((- ( ( f) -> nível )> = ? 0) ( unsigned char ) (+ + ( f) -> CURP ) [-1] : _fgetc ( f) )
Sempre que o pré-processador C analisa o código-fonte e encontra o identificador " getc " com os parâmetros entre parênteses , ele insere os parâmetros para o token de substituição que define getc . Enquanto os parâmetros não são expressões , a macro sempre retornará o mesmo resultado que fgetc .
Desempenho
GETC às vezes é implementado como uma macro para aumentar o desempenho do aplicativo através do aumento da velocidade de execução e reduzindo a sobrecarga de processamento . Quando você usa fgetc em um programa , os recursos de processador e memória são gastos acompanhando a execução das instruções da função , as variáveis de registro criados , bem como o trabalho real que precisa ser feito para retornar um caractere do fluxo de dados. Uma vez que a macro getc é compilado em linha antes de o programa já é executado, não há nenhuma função sobrecarga e sua aplicação pode correr mais rápido.
Efeitos Colaterais
Às vezes é preferível utilizar , em vez de fgetc getc , a fim de evitar os erros provocados por macro efeitos colaterais expansão . Os efeitos secundários podem ocorrer quando uma macro getc é dada parâmetros que são expressões em vez de variáveis. Macro expansão inadequada pode resultar múltiplas tentativas de acesso ao fluxo de dados que pode produzir resultados inesperados. Isto pode ser evitado usando fgetc vez ou através da avaliação da expressão em primeiro lugar, em seguida, passando a variável ou ponteiro resultante para GETC .
Cruz Compatibilidade
fgetc como uma função é encontrado em todos os compiladores C , que estão de acordo com o American National Standards Institute ou ANSI C padrão. Quando se trata de GETC , no entanto , muitas vezes, não são as coisas de modo padrão . Às vezes , getc é definido como simplesmente como um outro nome para fgetc :
# define getc ( __stream ) fgetc ( __stream )
Quando getc é implementado como uma função, no entanto, a manter , simultaneamente, compatibilidade língua com outros compiladores C e eliminar a possibilidade de efeitos colaterais de macros.