在阅读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
。