Tag: 代码页

Can isdigit合法地是依赖于C的语言环境

在涉及setlocale的部分中,ANSI C标准在脚注中指出,其行为不受当前语言环境影响的唯一ctype.h函数是isdigit和isxdigit。 isdigit的Microsoft实现依赖于语言环境,因为,例如,在使用代码页1250的语言环境中,isdigit仅对0x30(’0’) – 0x39(’9’)范围内的字符返回非零值,而在使用代码页的语言环境中对于上标数字0xB2(’²’),0xB3(’³’)和0xB9(’¹’),1252 isdigit也返回非零值。 Microsoft是否依赖于isdigit语言环境而违反了C标准? 在这个问题中,我主要对C90感兴趣,C90是微软声称要遵守的,而不是C99。 附加背景: Microsoft自己的setlocale文档错误地指出isdigit不受语言环境的LC_CTYPE部分的影响。 涵盖ctype.h函数的C标准部分包含一些我认为含糊不清的措辞: 这些函数的行为受当前语言环境的影响。 下面列出了仅当不在“C”语言环境中时具有语言环境特定方面的那些函数。 我认为这是模棱两可的,因为不清楚它是什么试图说的isdigit这样的函数没有关于特定于语言环境的方面的注释。 它可能试图说这些函数必须假定依赖于语言环境,在这种情况下,Microsoft的isdigit实现就可以了。 (除了我前面提到的脚注似乎与这种解释相矛盾。)