2013-07-31 7 views
9

Traditionell war es ein Fehler, signed char an die Prädikate ctype.h zu übergeben, weil sie nur für -1 bis 255 definiert waren, also könnte -128 bis -2 dazu führen, dass außerhalb der Array-Grenzen gelesen wird.Erfordert ctype.h immer noch unsigned char?

Wurde dies jemals behoben, oder müssen Sie immer noch genau unsigned char verwenden, um undefiniertes Verhalten in modernen Versionen von C zu vermeiden?

+0

Moderne Programme haben nur steigende Chancen, mit Zeichen im Bereich 128-255 konfrontiert zu werden, die als negativ gewertet werden würden, wenn sie als signierte Zeichen betrachtet werden, also lautet die Antwort "mehr als je zuvor". –

Antwort

11

Müssen Sie immer noch streng genommen unsigned char verwenden, um undefiniertes Verhalten in modernen Versionen von C zu vermeiden?

Ja, vom C11 draft standard Abschnitt 7.4Charakter < ctype.h> Absatz Handhabung sagt (Hervorhebung von mir):

Der Header deklariert mehrere Funktionen, die für die Klassifizierung und Zuordnung Zeichen. 198) In allen Fällen ist das Argument ein int, dessen Wert als vorzeichenloses Zeichen darstellen oder gleich dem Wert des Makros EOF sein soll. Wenn das Argument einen anderen Wert hat, ist das Verhalten nicht definiert.

Dies gilt auch für draft C99 standard und Sie finden es im selben Abschnitt.