在阅读nginx源代码时,我发现以下行:

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

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

不是sizeof(-2147483648)-1

不是-2147483648-1

不是-2147483649
要不然?

有什么不同?

最佳答案

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

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

strlen("-2147483648")

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

10-06 15:31