Heim >Backend-Entwicklung >C++ >Zu „toupper()' und „tolower()': Müssen wir in „unsigned char' umwandeln?
Beim Aufruf von toupper() und tolower(): Umwandlung in unsigned char
Während ein hoch angesehener Kommentator auf Stack Overflow vorschlägt, char- Argumente für unsigned char vor dem Aufruf von toupper oder tolower verwenden, wird diese Notwendigkeit von Bjarne Stroustrup in „The C.“ nicht explizit erwähnt Programmiersprache.“ Diese Meinungsverschiedenheit wirft die Frage auf: Ist eine solche Besetzung notwendig oder handelt es sich um ein Versehen?
Typen und Darstellungen
char, signiertes char und unsigniertes char sind unterschiedlich Typen. Während char im Allgemeinen entweder eine vorzeichenbehaftete oder eine vorzeichenlose Darstellung darstellt, erfordert die toupper-Funktion ein int-Argument, das als vorzeichenloses Zeichen dargestellt werden kann. Wenn das Argument nicht darstellbar oder gleich EOF ist, tritt undefiniertes Verhalten auf.
Undefiniertes Verhalten
Angenommen, plain char ist von einem vorzeichenbehafteten Typ. Wenn name[0] einen negativen Wert angibt, riskiert die Verwendung von toupper(name[0]) undefiniertes Verhalten. Für das von Stroustrup bereitgestellte Beispiel garantiert die Initialisierung jedoch nicht negative Werte.
Unnötige Konvertierungen
Dennoch löst die Konvertierung von char in (unsigned)char das Problem nicht Problem, da es aufgrund der Implizit immer noch zu einem negativen int-Wert führen kann Konvertierung.
Praktische Überlegungen
Toupper könnte zwar implementiert werden, um negative Werte zu verarbeiten, dies ist jedoch nicht zwingend erforderlich. Darüber hinaus müssen diese Funktionen Argumente akzeptieren, die EOF (-1) entsprechen, was typischerweise ein negativer Wert ist.
Fazit
Obwohl toupper EOF akzeptiert, benötigt es das Das Eingabezeichen muss als vorzeichenloses Zeichen darstellbar sein, um undefiniertes Verhalten zu verhindern. Auch wenn das Beispiel von Stroustrup möglicherweise nicht zeigt, dass ein Casting erforderlich ist, handelt es sich dennoch um eine empfohlene Vorgehensweise, um die Portabilität und korrekte Funktionalität sicherzustellen, insbesondere beim Umgang mit Negativ- oder Sonderzeichen.
Das obige ist der detaillierte Inhalt vonZu „toupper()' und „tolower()': Müssen wir in „unsigned char' umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!