为啥 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)?