为啥 sizeof("-2147483648") - 1

Posted

技术标签:

【中文标题】为啥 sizeof("-2147483648") - 1【英文标题】:why sizeof("-2147483648") - 1为什么 sizeof("-2147483648") - 1 【发布时间】:2012-11-19 03:58:48 【问题描述】:

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

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

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

不是 sizeof(-2147483648) - 1

不是 -2147483648 - 1

不是 -2147483649 不然呢?

有什么区别?

【问题讨论】:

sizeof("1234") 绝对不同于sizeof(1234),后者绝对不同于1234。第一个是字符数组的大小,第二个是整数的大小,第三个是普通值。 【参考方案1】:

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

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

strlen("-2147483648")

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

【讨论】:

以上是关于为啥 sizeof("-2147483648") - 1的主要内容,如果未能解决你的问题,请参考以下文章

为啥“memset(arr, -1, sizeof(arr)/sizeof(int))”不能将整数数组清除为-1?

为啥“sizeof(a ? true : false)”会给出四个字节的输出?

在 C 中,为啥 sizeof(char) 为 1,而 'a' 是 int?

请教c语言中打印变量的大小被警告是为啥(VS2019/Debug/x64)?

为啥 sizeof(BaseClass) == sizeof(DerivedClass) 虽然我添加了一个成员

write之后为啥read不出来 为啥?