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.