isalpha(和其他ctype.h函数)的返回值意义是什么?

3
isalpha()函数的返回值,如果字符不是字母,则为0,如果是字母,则为非零。很多其他ctype.h库函数也是如此。这个函数的返回类型有什么意义呢?换句话说,为什么不只是对字母字符返回1呢?我搜索了一下谷歌,并没有找到答案。

它们返回逻辑布尔值。 - Konrad Rudolph
1
这些函数或宏的实际实现可能是一些优化的东西,导致返回其他值而不是1。只需将它们用作布尔函数,因为任何非零值都将被视为“true”。 - Some programmer dude
2个回答

5
返回值未指定,因为常见的实现如果值不为零,可能会省去将其设置为1的步骤,从而节约一些循环。例如,不等式测试可以实现为减法运算。
#define NEQ(a,b) (a-b)

如果你需要在不相等时返回1,那么你需要进行比仅仅减法多一点的工作。因此,最好不要要求函数返回1来保证性能。


即使检查寄存器是否等于零也更快。 因为大多数 CPU 架构自动设置了零标志。 - G. C.
@G.C. 这是另一个实现细节,取决于代码上下文。如果将结果分配给变量(int isneq = NEQ(a,2)),则汇编代码与仅用作条件的情况不同 if (NEQ(a,2)) { ... },在这种情况下,如果CPU架构支持,则检查零标志就足够了。 - Ctx

0

如果字符是字母,则返回非零整数值,否则返回零。它返回一个int,因为这是古老的C语言默认的返回值,而且考虑到这些函数是用于条件中使用的,将返回值限制为0和1需要不必要的代码(带来很少的好处)。

您可能还注意到所有这些函数的名称都比八个字符短或等长。这同样是古老的C语言的遗留问题。函数名称不能超过8个字符。


@klutt 这怎么样? - S.S. Anne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接