Trong phần bao gồm setlocale, tiêu chuẩn ANSI C nêu trong chú thích rằng các hàm duy nhất ctype.h có hành vi không bị ảnh hưởng bởi ngôn ngữ hiện tại là isdigit và isxdigit.Có thể isdigit hợp pháp là ngôn ngữ phụ thuộc vào C
Việc triển khai Microsoft isdigit phụ thuộc vào ngôn ngữ bởi vì, ví dụ: bằng ngôn ngữ sử dụng trang 1250 isdigit chỉ trả về khác 0 cho các ký tự trong phạm vi 0x30 ('0') - 0x39 ('9'). các ngôn ngữ sử dụng trang mã 1252 isdigit cũng trả về khác 0 cho các chữ số 0xB2 ('²'), 0xB3 ('³') và 0xB9 ('¹').
Microsoft có vi phạm tiêu chuẩn C bằng cách đặt phụ thuộc vào ngôn ngữ isdigit không?
Trong câu hỏi này, tôi chủ yếu quan tâm đến C90, mà Microsoft tuyên bố tuân theo, thay vì C99.
nền khác: tài liệu riêng
của Microsoft setlocale sai khẳng định rằng isdigit không bị ảnh hưởng bởi phần LC_CTYPE của miền địa phương.
Phần của chuẩn C bao gồm các chức năng ctype.h chứa một số từ ngữ mà tôi xem xét mơ hồ:
Hành vi của các chức năng này bị ảnh hưởng bởi locale hiện hành. Những chức năng đó chỉ có các khía cạnh cụ thể về miền địa phương khi không có ngôn ngữ "C" được ghi chú bên dưới.
Tôi xem xét điều này mơ hồ vì không rõ những gì nó đang cố gắng nói về các chức năng như isdigit mà không có ghi chú về khía cạnh địa phương cụ thể. Nó có thể là cố gắng để nói rằng các chức năng như vậy phải được giả định là phụ thuộc vào miền địa phương, trong trường hợp của Microsoft thực hiện isdigit sẽ là OK. (Ngoại trừ chú thích mà tôi đã đề cập trước đó dường như mâu thuẫn với cách giải thích này.)
+1 cho suy nghĩ rất thực tế :) –