当我使用 c17 标准(或任何其他)在 vscode 中运行 isalpha 时,它总是只返回 1 或 0。但是当我在另一个系统上运行它时,它返回的数字也大于 1。isalpha 是如何工作的?我在哪里可以看到我有哪个实现?是什么导致我的系统出现这种行为差异?
我意识到这个问题可能很奇怪或无关紧要,但我试图寻找答案却没有找到。
答案 0 :(得分:2)
来自 C 标准:
<块引用>7.4.1 字符分类函数
当您实现此类中的函数时,您不必返回 1
或 0
。您可以自由返回任何非零值,不仅是 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。