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

时间:2012-11-19 03:58:48

标签: c macros precompile

在阅读nginx源代码时,我找到了这一行:

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

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

not sizeof(-2147483648) - 1

不是-2147483648 - 1

不是-2147483649 或者?

有什么区别?

1 个答案:

答案 0 :(得分:12)

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

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

strlen("-2147483648")

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