【问题标题】: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。第一个是字符数组的大小,第二个是整数的大小,第三个是普通值。

标签: c macros precompile


【解决方案1】:

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

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

strlen("-2147483648")

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

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多