在涵蓋setlocale的部分中,ANSI C標準在腳註中聲明,其行爲不受當前語言環境影響的唯一ctype.h函數是isdigit和isxdigit。isdigit合法地取決於語言環境C
isdigit的Microsoft實現與區域設置有關,例如,在使用代碼頁1250的區域設置中,isdigit僅對範圍爲0x30('0') - 0x39('9')的字符返回非零值,而在使用代碼頁1252 isdigit的語言環境對於上標數字0xB2('2'),0xB3('3')和0xB9('1')也返回非零值。
微軟是否違反了C標準,使isdigit語言環境相關?
在這個問題中,我主要感興趣的是微軟聲稱符合的C90,而不是C99。
其他背景:
微軟自己的setlocale的文檔錯誤地指出ISDIGIT是由語言環境的LC_CTYPE部分不受影響。
C標準覆蓋ctype.h函數的部分包含了一些字眼,我認爲含糊:
這些函數的行爲受當前語言環境的影響。下面列出了只有當不在「C」語言環境中時才具有特定於語言環境的那些功能 。
我認爲這是不明確的,因爲它不清楚它想要說的功能,如isdigit,沒有關於區域特定方面的註釋。它可能試圖說這些函數必須被假定爲依賴locale,在這種情況下,微軟對isdigit的實現是可以的。 (除了我之前提到的腳註似乎與此解釋相矛盾。)
+1非常實用的想法:) – 2010-05-24 16:23:49