2012-11-19 14 views
8

Quando si legge il codice sorgente nginx, trovo questa linea:perché sizeof ("- 2147483648") - 1

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

perché l'utilizzo di sizeof ("- 2147483648") - 1?

non sizeof (-2147483648) - 1

non -2147483648 - 1

non

-2.147,483649 millions o altro?

Qual è la differenza?

+2

'sizeof (" 1234 ")' sicuramente non è lo stesso di 'sizeof (1234)', che sicuramente non è lo stesso di '1234'. Il primo è la dimensione di un array di caratteri, il secondo è la dimensione di un intero e il terzo è il valore normale. – chris

risposta

12

Fondamentalmente -2147483648 è il più largo, in termini di caratteri richiesti per la sua rappresentazione, di uno qualsiasi dei numeri interi a 32 bit con segno. Questa macro NGX_INT32_LEN definisce il numero di caratteri che può contenere un numero intero.

Fa ciò prendendo la quantità di spazio necessaria per quella costante di stringa e sottraendo 1 (perché sizeof avrà spazio per il carattere NUL finale). E 'più veloce rispetto all'utilizzo di:

strlen("-2147483648") 

perché non tutti i compilatori la tradurrà in costante 11.

+0

Grazie mille. – NStal

Problemi correlati