为什么sizeof(" - 2147483648") - 1

NSt*_*tal 8 c macros precompile

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

#define NGX_INT32_LEN   sizeof("-2147483648") - 1
Run Code Online (Sandbox Code Playgroud)

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

not sizeof(-2147483648) - 1

不是-2147483648 - 1

不是-2147483649或者?

有什么不同?

Edm*_*und 12

基本上-2147483648 在其表示所需的字符方面是任何有符号的32位整数的最宽的.这个宏NGX_INT32_LEN定义了这样一个整数可以有多少个字符.

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

strlen("-2147483648")
Run Code Online (Sandbox Code Playgroud)

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