8

在阅读 nginx 源代码时,我发现这一行:

#define NGX_INT32_LEN   sizeof("-2147483648") - 1

为什么使用 sizeof("-2147483648") - 1?

不是 sizeof(-2147483648) - 1

不是 -2147483648 - 1

不是 -2147483649 还是其他?

有什么不同?

4

1 回答 1

12

基本上 -2147483648 是任何带符号的 32 位整数中最宽的,就其表示所需的字符而言。这个宏NGX_INT32_LEN定义了这样一个整数可以有多少个字符。

它通过获取该字符串常量所需的空间量并减去 1 来实现这一点(因为sizeof将为尾随的 NUL 字符提供空间)。它比使用更快:

strlen("-2147483648")

因为并非所有编译器都会将其转换为常量11

于 2012-11-19T04:05:03.043 回答