阅读nginx源代码时,我发现了这一行代码:
#define NGX_INT32_LEN sizeof("-2147483648") - 1
为什么要使用sizeof("-2147483648") - 1?
而不是使用sizeof(-2147483648) - 1
或者-2147483648 - 1
还是-2147483649?
这有什么区别?
#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
。
sizeof("1234")
绝对不同于sizeof(1234)
,也绝对不同于1234
。第一个是字符数组的大小,第二个是整数的大小,第三个是纯值。 - chris