getc () vs fgetc () - ¿Cuáles son las principales diferencias?

En todas partes veo "es prácticamente idéntico", o algo similar ...

DesdeEl tutorial de programación de GNU C :

Hay otra función en la biblioteca de GNU C llamada fgetc. Es idéntico a getc en la mayoría de los aspectos, excepto que getc generalmente se implementa como una función de macro y está altamente optimizado, por lo que es preferible en la mayoría de las situaciones. (En situaciones en las que estás leyendo desde una entrada estándar, getc es tan rápido como fgetc, ya que los humanos escriben lentamente en comparación con la rapidez con que las computadoras pueden leer su entrada, pero cuando estás leyendo en una secuencia que no es interactivamente producida por un humano, fgetc es probablemente mejor.)

¿Cuáles son las otras diferencias? He escuchado que cada uno tiene una implementación diferente (y una puede usarse como macro) pero, ¿qué los hace tan diferentes (o lo suficientemente diferentes) para que ambos estén en la biblioteca (o especificación) de Standard C?

Respuestas a la pregunta(3)

Su respuesta a la pregunta