为什么 isalpha 只返回 1 或 0?

时间:2021-02-08 17:30:31

标签: c

当我使用 c17 标准(或任何其他)在 vscode 中运行 isalpha 时,它总是只返回 1 或 0。但是当我在另一个系统上运行它时,它返回的数字也大于 1。isalpha 是如何工作的?我在哪里可以看到我有哪个实现?是什么导致我的系统出现这种行为差异?

我意识到这个问题可能很奇怪或无关紧要,但我试图寻找答案却没有找到。

2 个答案:

答案 0 :(得分:2)

来自 C 标准:

<块引用>

7.4.1 字符分类函数

  1. 本小节中的函数返回非零(真)当且仅当参数的值符合 函数的描述。

当您实现此类中的函数时,您不必返回 10。您可以自由返回任何非零值,不仅是 1

答案 1 :(得分:0)

这是我在头文件 ctype.h 中找到的 isalpha() 实现:

__DARWIN_CTYPE_TOP_inline int
isalpha(int _c)
{
return (__istype(_c, _CTYPE_A));
}

这是其中使用的 __istype() 函数:

__istype(__darwin_ct_rune_t _c, unsigned long _f)
{
#ifdef USE_ASCII
    return !!(__maskrune(_c, _f));
#else /* USE_ASCII */
    return (isascii(_c) ? !!(_DefaultRuneLocale.__runetype[_c] & _f)
        : !!__maskrune(_c, _f));
#endif /* USE_ASCII */
}

据我所知,双重否定'!!'用于将任何非 1 整数转换为 1,除了 0 保持 0。这可以解释为什么我的 isalpha 只返回 0 或 1。

相关问题