代码之家  ›  专栏  ›  技术社区  ›  cdev

isdigit在C中可以合法地依赖于语言环境吗

  •  17
  • cdev  · 技术社区  · 14 年前

    在涉及setlocale的部分中,ansic标准在脚注中指出,行为不受当前语言环境影响的ctype.h函数只有isdigit和isxdigit。

    微软是否违反了C标准,使isdigit依赖于语言环境?

    在这个问题上,我主要感兴趣的是C90,而不是C99,微软声称它符合C90。

    其他背景:

    C标准中涉及ctype.h函数的部分包含一些我认为不明确的措辞:

    这些函数的行为受当前区域设置的影响。那些功能

    我认为这是不明确的,因为不清楚它试图说的是什么,比如isdigit函数,对于这些函数,没有关于语言环境特定方面的注释。它可能试图说这样的函数必须被假定为依赖于语言环境,在这种情况下,微软的isdigit实现就可以了(但我前面提到的脚注似乎与这种解释相矛盾。)

    2 回复  |  直到 8 年前
        1
  •  11
  •   Mathias Bynens    6 年前
    1. 如果Microsoft不正确,请参见第1项

    微软对这个规范总是有自己的解释。通常来说,“但微软错了”这句话对你的首席执行官没有任何影响,所以你必须围绕微软的错误/解释进行编码。

    支持IE和Outlook错误行为的代码数量惊人。

    在许多情况下,唯一的解决方案是滚动您自己的函数版本以执行正确的操作,并执行以下操作:

    int my_isdigit( int c )
    {
    #ifdef WIN32
      your implementation goes here
    #else
      return isdigit( c );
    #endif
    }
    
        2
  •  5
  •   Hans Passant    14 年前

    第2.2.1节定义了所需的字符集。第2.2.1.2节接着描述扩展字符的行为:

    • 任何附加成员的存在、意义和表示都是特定于语言环境的。