【问题标题】:Why memcmp return int为什么 memcmp 返回 int
【发布时间】:2021-06-28 20:27:53
【问题描述】:

我阅读了有关 int vs size_t vs ssize_t 的信息,我知道 int 和 ssize_t 是有符号的,而 size_t 是无符号的。

为什么 memcmp 返回 int 而没有像 recv return ssize_t 那样返回 ssize_t?

【问题讨论】:

  • 标准 C 中没有 ssize_t 类型。这是一个非标准扩展。

标签: c integer manpage size-t memcmp


【解决方案1】:

int 足以保存memcmp 的返回值。

如果两个给定的内存区域相等,memcmp 函数返回 0,如果第一个区域比较少,则返回小于 0 的值,如果第一个区域比较多,则返回大于 0 的值。

ssize_t 可能比int 大(在大多数实现中会更大),int 通常是“自然”字长,因此使用更大的字号没有任何好处。

【讨论】:

  • 所以我们将在小符号数时使用 int 。 ssize_t 到更大的有符号数。 unsigned int 到小的无符号数和 size_t 到更大的无符号数?
  • 当值表示内存缓冲区的长度时,通常使用 @yfr24493AzzrggAcom size_tssize_t。还有其他类型可用于更大或更小的值。一般来说,除非有其他理由,否则应使用int
  • 另外,ssize_t 是 POSIX 数据类型,而不是标准 C 数据类型。因此,memcmp() 的标准版本无法返回 ssize_t
猜你喜欢
  • 2017-12-12
  • 2019-04-28
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 2014-12-24
  • 2019-10-12
  • 2017-06-12
  • 2011-01-26
相关资源
最近更新 更多