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.