Pourquoi la variable utilisée pour contenir la valeur de retour de getchar doit-elle être déclarée comme étant int?

Je suis débutant en langage de programmation C, j’ai récemment étudié la fonction getchar , qui accepte un caractère de la console ou d’un fichier, l’affiche immédiatement lors de la frappe et nous devons appuyer sur la touche Entrée pour continuer.

Il retourne le caractère unsigned char qu’ils ont lu. Si une fin de fichier ou une erreur est rencontrée, les getchar() renvoient EOF.

Ma question est que, quand il renvoie un caractère unsigned char , alors pourquoi sa valeur renvoyée est stockée dans une variable int ?

Aidez-moi, s’il vous plaît.

Justement à cause de cette valeur EOF. Etant donné qu’un caractère dans un fichier peut être une valeur de caractère possible, y compris le caractère null utilisé par les chaînes de caractères C pour la terminaison, getchar() doit utiliser un type entier plus grand pour append une valeur EOF.

Il se trouve que vous utilisez simplement int à cette fin, mais vous pouvez utiliser n’importe quel type d’au moins 9 bits.

Le type de retour est int pour prendre en compte la valeur spéciale EOF.

EOF est une macro qui se développe en une expression constante entière de type int et une valeur négative dépendante de l’implémentation, mais qui est très généralement égale à -1.

Lire ce lien: lien

Ici il est écrit que:

Ne convertissez pas la valeur renvoyée par une fonction d’E / S de caractère en caractère si cette valeur est comparée à EOF. Une fois que la valeur de retour de ces fonctions a été convertie en un type char, les valeurs de caractère peuvent ne plus être distinguées de EOF. De même, si sizeof (int) == sizeof (char), alors l’int utilisé pour capturer la valeur de retour peut ne pas être différent de EOF. Voir FIO35-C. Utilisez feof () et ferror () pour détecter les erreurs de fin de fichier et les erreurs de fichier lorsque sizeof (int) == sizeof (char), pour plus de détails sur le moment où sizeof (int) == sizeof (char). Voir STR00-C. Représentez les caractères en utilisant un type approprié pour plus d’informations sur l’utilisation correcte des types de caractères.

Cette règle s’applique à l’utilisation de toutes les fonctions d’E / S des caractères.