Kann isdigit legitimerweise locale-abhängig in C sein
In dem Abschnitt über setlocale gibt der ANSI C-Standard in einer Fußnote an, dass die einzigen ctype.h-Funktionen, deren Verhalten vom aktuellen Gebietsschema nicht beeinflusst wird, isdigit und isxdigit sind.
Die Microsoft-Implementierung von isdigit ist vom Gebietsschema abhängig, da isdigit beispielsweise in Gebietsschemas mit Codepage 1250 für Zeichen im Bereich von 0x30 ('0') - 0x39 ('9') nur einen Wert ungleich Null zurückgibt, während in Gebietsschemas Code verwendet wird Seite 1252 isdigit gibt auch für die hochgestellten Ziffern 0xB2 ('²'), 0xB3 ('³') und 0xB9 ('¹') einen Wert ungleich Null zurück.
Verstößt Microsoft gegen den C-Standard, indem es das isdigit-Gebietsschema abhängig macht?
In dieser Frage geht es mir hauptsächlich um C90, dem Microsoft zufolge eher entspricht als um C99.
Zusätzlicher Hintergrund:
In der Microsoft-Dokumentation zu setlocale wird fälschlicherweise angegeben, dass isdigit vom LC_CTYPE-Teil des Gebietsschemas nicht betroffen ist.
Der Abschnitt des C-Standards, der die ctype.h-Funktionen behandelt, enthält einige Formulierungen, die ich für mehrdeutig halte:
Das Verhalten dieser Funktionen wird vom aktuellen Gebietsschema beeinflusst. Diejenigen Funktionen, die nur dann länderspezifische Aspekte aufweisen, wenn sie sich nicht in der Ländereinstellung "C" befinden, werden nachfolgend aufgeführt.
Ich halte dies für mehrdeutig, da unklar ist, was es über Funktionen wie isdigit zu sagen versucht, für die es keine Hinweise zu länderspezifischen Aspekten gibt. Es könnte versucht werden zu sagen, dass solche Funktionen als vom Gebietsschema abhängig angenommen werden müssen. In diesem Fall wäre die Implementierung von isdigit durch Microsoft in Ordnung. (Außer dass die oben erwähnte Fußnote dieser Interpretation zu widersprechen scheint.)