2012-11-19 21 views
8

nginx kaynak kodu okuma, ben bu satırı bulun: ("- 2147483648") - 1neden sizeof ("- 2147483648") - 1

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

kullanarak neden sizeof? değil sizeof (-2147483648)

- 1

değil -2147483648 - 1

değil -2147483649 yoksa?

fark nedir?

+2

'sizeof (" 1234 ") kesinlikle kesinlikle" 1234 "ile aynı değil," 1234 "ile aynı değildir. Birincisi bir karakter dizisinin büyüklüğü, ikincisi bir tamsayıdır ve üçüncüsü düz değerdir. – chris

cevap

12

Temelde -2147483648 imzalanmış 32 bitlik tamsayılar herhangi birinin, onun temsil için gerekli karakterlerin açısından en geniş olduğunu. Bu makro NGX_INT32_LEN, böyle bir tamsayıya kaç karakter uzunluğunda olabileceğini tanımlar.

Bunu, bu dizge için gerekli alan miktarını sabit alarak ve 1'i çıkartarak yapar (çünkü sizeof, son NUL karakteri için boşluk sağlar). Bu kullanmaktan daha hızlıdır:

strlen("-2147483648") 

tüm derleyiciler sabit 11 içine çevirir çünkü.

+0

Çok teşekkür ederim. – NStal