8

nginxのソースコードを読んでいると、次の行が見つかります。

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

sizeof( "-2147483648")-1を使用する理由

sizeof(-2147483648)ではありません-1

-2147483648-1ではありません

-2147483649またはそれ以外ではありませんか?

違いは何ですか?

4

1 に答える 1

12

基本的に、-2147483648は、その表現に必要な文字の観点から、符号付き32ビット整数の中で最も幅が広いです。このマクロNGX_INT32_LENは、そのような整数の長さが何文字になるかを定義します。

これは、その文字列定数に必要なスペースの量を取得し、1を引くことによって行われます(sizeof末尾のNUL文字にスペースが提供されるため)。使用するよりも高速です。

strlen("-2147483648")

すべてのコンパイラがそれを定数に変換するわけではないから11です。

于 2012-11-19T04:05:03.043 に答える