2012-07-02 13 views

Respuesta

13

No, esto no es un error.

Está diciendo Format que el primer argumento es un entero sin signo, pero de hecho pasó un entero con signo. Ese entero con signo se interpreta como sin signo y el patrón de bits para un valor con signo de -100 equivale a un valor sin signo de 4294967196.

De hecho, su código es un error. La cadena de formato define un contrato que el compilador no puede aplicar porque los argumentos a Format están débilmente tipados. Es su responsabilidad asegurarse de que cuando prometa pasar un valor sin firmar, realmente pase un valor sin firmar. El error en el código aquí es lógicamente equivalente a pasar una cadena o un valor de coma flotante, que es un error que reconocerá mucho más fácilmente.

+2

Whoeha, esta es una mala interpretación importante de mí: _unsigned decimal_ es el tipo de entrada en lugar de la salida. – NGLN

+0

@NGLN: las funciones de estilo Printf funcionan de esa manera –

Cuestiones relacionadas