【问题标题】:What is the meaning of return value of isalpha (at other ctype.h functions)?isalpha 的返回值是什么意思(在其他 ctype.h 函数中)?
【发布时间】:2020-04-09 00:37:21
【问题描述】:

如果字符不是字母表,isalpha() 的返回值为0,如果是字母表则非零。许多其他ctype.h 库函数也是如此。

这个函数的返回类型有什么意义吗?
换句话说,为什么不简单地为字母字符返回1
我用谷歌搜索并没有找到任何答案。

【问题讨论】:

  • 它们返回逻辑布尔值。
  • 这些函数或宏的实际实现可能是最佳的,导致返回1以外的其他值。只需将它们用作布尔函数,因为任何非零都将是“真”。

标签: c ctype isalpha


【解决方案1】:

如果字符是字母则返回一个非零整数值,否则返回零。它返回一个int,因为这是古代 C 的默认返回值,并且考虑到这些函数是在条件下使用的,它需要不必要的代码(几乎没有什么好处)来将返回的值限制为 0 和 1。

您可能还注意到,所有这些函数的名称都短于或长于八个字符。这又是古代 C 语言的遗物。函数名称不能超过 8 个字符。

【讨论】:

  • @klutt 怎么样?
【解决方案2】:

没有指定返回值,因为它可能会为常见的实现节省几个周期如果它不为零,则必须将其设置为1。例如,不等式检验可以实现为减法

#define NEQ(a,b) (a-b)

如果你要求它在不等式上返回1,你必须做更多的工作,而不仅仅是减法。因此,坚持函数返回 1 可能会更好。

【讨论】:

  • 即使检查寄存器是否等于零也更快。由于大多数 cpu 架构会自动设置零标志。
  • @G.C.这是另一个取决于代码上下文的实现细节。如果将结果分配给变量 (int isneq = NEQ(a,2)) ,则汇编代码与仅用作条件 if (NEQ(a,2)) { ... } 时不同,如果 cpu 架构支持,则确实检查零标志就足够了。
猜你喜欢
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多