En la sección que cubre setlocale, el estándar ANSI C indica en una nota al pie que las únicas funciones ctype.h cuyo comportamiento no se ve afectado por la configuración regional actual son isdigit e isxdigit.Can isdigit legítimamente depende de la configuración regional en C
La implementación de Microsoft de isdigit depende de la configuración regional porque, por ejemplo, en las configuraciones regionales que usan la página de códigos 1250 isdigit solo devuelve caracteres que no son cero en el rango 0x30 ('0') - 0x39 ('9'), mientras que en las configuraciones regionales que utilizan la página de códigos 1252 isdigit también devuelven un valor distinto de cero para los dígitos superíndices 0xB2 ('²'), 0xB3 ('³') y 0xB9 ('¹').
¿Microsoft está violando el estándar C al hacer que isdigit locale sea dependiente?
En esta pregunta, estoy interesado principalmente en C90, que Microsoft dice cumplir, en lugar de C99.
fondo adicional: la propia documentación de setlocale
de Microsoft afirma incorrectamente que isdigit no se ve afectada por la parte LC_CTYPE de la localización.
La sección de la norma C que cubre las funciones ctype.h contiene una redacción que considero ambigua:
El comportamiento de estas funciones está afectado por la localización actual. Las funciones que tienen aspectos específicos de la configuración regional solo cuando no están en la configuración regional "C" se indican a continuación.
Considero que esto es ambiguo porque no está claro lo que está tratando de decir sobre funciones como isdigit para las cuales no hay notas sobre aspectos específicos de la configuración regional. Podría estar intentando decir que se debe asumir que tales funciones dependen de la configuración regional, en cuyo caso la implementación de isdigit de Microsoft estaría bien. (Excepto que la nota al pie que mencioné anteriormente parece contradecir esta interpretación.)
+1 para un pensamiento muy práctico :) –