Warum Putchar, Topper, Tolower usw. ein Int anstelle eines Char?

In C sind Strings Arrays von char (char *) und Zeichen werden normalerweise in gespeichertchar. Mir ist aufgefallen, dass einige Funktionen aus der libC anstelle eines Zeichens ganze Zahlen als Argumente verwenden.

Nehmen wir zum Beispiel die Funktionentoupper() undtolower() dass beide verwendenint. Die Manpage sagt:

Wenn c kein vorzeichenloser Zeichenwert oder EOF ist, ist das Verhalten dieser Funktionen undefiniert.

Meine Vermutung ist, dass mit einemint, toupper undtolower können damit umgehenunsigned char undEOF. Aber in der TatEOF ist in der Praxis (gibt es eine Regel zu seinem Wert?) ein Wert, der mit a gespeichert werden kannchar, und da diese Funktionen nicht transformierenEOF Ich frage mich, warumtoupper nimmt nicht einfach ein Zeichen als Argument.

Warum müssen wir auf jeden Fall etwas akzeptieren, das kein Zeichen ist (wie EOF)? Könnte mir jemand einen relevanten Anwendungsfall liefern?

Das ist ähnlich mitfputc oderputchar, das dauert auch eineint das wird in ein umgewandeltunsigned char sowieso.

Ich suche die genauen Beweggründe für diese Wahl. Ich möchte überzeugt sein, ich möchte nicht antworten, dass ich nicht weiß, ob mich eines Tages jemand fragt.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage