Diferencia entre getc y fgetc




Ejecución

A menudo hay muchas maneras legítimas para llevar a cabo una tarea de programación utilizando la instancia language.for C, getc y fgetc ambos son parte del estándar C incluir archivo stdio.h . Fgetc función se implementa como un C-idioma. GETC, por otro lado, se puede encontrar como una función o como una macro. Por ejemplo, usted puede encontrar getc incluye en el archivo stdio.h como el siguiente código:

# Definir getc (f) ((- ((f) -> nivel)> = 0)? (Unsigned char) (+ + (f) -> CURP) [-1]: _fgetc (f))



Cada vez que el preprocesador de C analiza el código fuente y buscar el identificador " getc " con parámetros entre corchetes, introduzca los parámetros en el símbolo de reemplazo que define getc. Mientras que los parámetros no son expresiones, la macro siempre devuelve el mismo resultado fgetc.

Rendimiento

GETC a veces implementado como una macro para aumentar el rendimiento de aplicaciones mediante el aumento de la velocidad de ejecución y reducir la carga de procesamiento. Al utilizar fgetc en un programa, los recursos del procesador y la memoria se gastan el seguimiento de la ejecución de las instrucciones de la función, las variables de registro creadas, así como el trabajo real que se necesita hacer para devolver un carácter desde el flujo de datos. Dado que la macro getc se compila en línea antes de que el programa se ejecuta siempre, no hay función de sobrecarga y la aplicación puede correr más rápido.

Efectos secundarios

A veces es preferible utilizar fgetc en lugar de getc para evitar los errores causados por los efectos secundarios expansión de la macro. Pueden ocurrir efectos secundarios cuando una macro getc se da parámetros que son expresiones muy variables. Uso indebido de expansión Macro puede causar múltiples intentos de acceso a la secuencia de datos que puede producir resultados inesperados. Esto se puede evitar mediante el uso de fgetc lugar o la evaluación de la expresión primera, a continuación, la variable resultante o puntero a getc.

Compatibilidad con

Función fgetc que se encuentra en todos los compiladores de C se ajusta a la American National Standards Institute o ANSI C. Cuando se trata de getc, sin embargo, a menudo las cosas no son tan estándar. A veces, getc se define como simplemente otro nombre para fgetc:

# Definir getc (__stream) fgetc (__stream)

Cuando getc se implementa como una función, sin embargo, es al mismo tiempo mantener la compatibilidad con otros compiladores de lenguaje C y eliminar la posibilidad de efectos secundarios macro.



Deja un comentario