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

8
阅读nginx源代码时,我发现了这一行代码:
#define NGX_INT32_LEN   sizeof("-2147483648") - 1

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

而不是使用sizeof(-2147483648) - 1

或者-2147483648 - 1

还是-2147483649?

这有什么区别?


2
sizeof("1234") 绝对不同于 sizeof(1234),也绝对不同于 1234。第一个是字符数组的大小,第二个是整数的大小,第三个是纯值。 - chris
1个回答

12

基本上,-2147483648是32位有符号整数中表示所需字符最多的宽度。此宏 NGX_INT32_LEN 定义了这样一个整数可以有多少个字符长。

它通过取字符串常量所需的空间并减去1(因为 sizeof 将提供尾随的NUL字符的空间)。这比使用以下方法更快:

strlen("-2147483648")

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接