setlocaleをカバーするセクションで、ANSI C標準は脚注で、現在のロケールの影響を受けない動作を持つctype.h関数はisdigitとisxdigitのみであると述べています。
たとえば、コードページ1250を使用するロケールでは、isdigitは0x30( '0')〜0x39( '9')の範囲の文字に対してのみゼロ以外を返すため、isdigitのMicrosoft実装はロケールに依存しますが、コードページを使用するロケールでは1252 isdigitは、上付き数字0xB2('²')、0xB3('³')、および0xB9('¹')に対してもゼロ以外を返します。
isdigitロケールに依存させることにより、MicrosoftはC標準に違反していますか?
この質問では、C99ではなく、Microsoftが準拠していると主張しているC90に主に関心があります。
追加の背景:
Microsoft独自のsetlocaleのドキュメントには、isdigitはロケールのLC_CTYPE部分の影響を受けないと誤って記載されています。
ctype.h関数をカバーするC標準のセクションには、あいまいだと思う言葉が含まれています。
これらの関数の動作は、現在のロケールの影響を受けます。「C」ロケールにない場合にのみロケール固有の側面を持つ関数を以下に示します。
ロケール固有の側面についての注記がないisdigitなどの関数について何を言おうとしているのかが明確でないため、これはあいまいだと思います。このような関数はロケールに依存していると想定する必要があると言っているかもしれません。その場合、Microsoftによるisdigitの実装は問題ありません。(先に述べた脚注がこの解釈と矛盾しているように見えることを除いて。)