Tengo un código que imprime la cantidad de memoria utilizada por el programa. La línea es similar a esto:printf con sizeof en plataformas 32 vs 64: ¿cómo manejo el código de formato de manera independiente de la plataforma?
printf("The about of RAM used is %u", anIntVariable*sizeof(double));
donde anIntVariable es una variable int para el número de elementos de la doble matriz. De todos modos, en los sistemas de 32 bits nunca tuve ningún problema, pero en los sistemas de 64 bits, aparece una advertencia del compilador sobre el uso de "% u" para un entero largo sin signo. El uso de "% lu" como el código de formato corrige el problema en 64 bits pero provoca que el compilador se queje en 32 bits porque el tipo vuelve a unsigned int. Descubrí que, de hecho, sizeof (doble) devuelve un valor diferente en sistemas de 32 contra 64 bits. He encontrado algunas guías de páginas web para convertir código de 32 bits a 64 bits Pero prefiero tener un código que funcione en ambos en lugar de simplemente convertir de ida y vuelta.
¿Cómo escribo esta línea de una manera independiente de la plataforma? Sé de muchas maneras que podría hacerlo usando las directivas de preprocesador, pero eso parece un truco. Seguramente hay una manera elegante de la que no me estoy dando cuenta.
Buena pregunta. – strager
Buena pregunta de hecho. Eche un vistazo a http: // bytes.com/topic/c/answers/506972-64-bit-portability-size_t-printf-format-strings – adatapost
Ver: http://stackoverflow.com/questions/1401526/use-printf-to-display-offt-nlinkt- sizet-and-others –