¿Cómo imprimo el tamaño de int en C?

Estoy tratando de comstackr lo siguiente en RHEL 5.6, 64 bit, y sigo recibiendo una advertencia

“var.c: 7: advertencia: el formato ‘% d’ espera el tipo ‘int’, pero el argumento 2 tiene el tipo ‘long unsigned int'”

Aquí está mi código:

#include  #include  int main() { unsigned int n =10; printf("The size of integer is %d\n", sizeof(n)); } 

No importa si cambio la statement de “n” a la siguiente

  1. firmado int n = 10;
  2. int n = 10;

Todo lo que quiero hacer es imprimir el tamaño del entero en mi máquina, sin realmente mirar los límites. H.

La función sizeof devuelve un tipo size_t . Intente usar %zu como el especificador de conversión en lugar de %d .

 printf("The size of integer is %zu\n", sizeof(n)); 

Para aclarar, use %zu si su comstackdor soporta C99; de lo contrario, o si desea una máxima portabilidad, la mejor manera de imprimir un valor de size_t es convertirlo a un unsigned long y usar %lu .

 printf("The size of integer is %lu\n", (unsigned long)sizeof(n)); 

La razón de esto es que el estándar garantiza que size_t sea ​​un tipo sin firma; sin embargo, el estándar no especifica que debe ser de un tamaño particular (lo suficientemente grande como para representar el tamaño de cualquier objeto). De hecho, si unsigned long no puede representar el objeto más grande para su entorno, es posible que incluso tenga que usar un especificador de %llu long long long sin firmar y %llu .

En C99, se agregó el modificador de longitud z para proporcionar una manera de especificar que el valor que se está imprimiendo es el tamaño de un tipo size_t. Al utilizar %zu , está indicando que el valor que se está imprimiendo es un valor sin signo de size_t .

Esta es una de esas cosas en las que parece que no deberías tener que pensar en ello, pero sí lo haces.

Otras lecturas:

  • printf y size_t
  • forma portátil de imprimir una instancia de size_t
  • asumiendo que size_t es sin signo largo

Su problema es que size_t es un tipo sin signo. Intenta usar

 printf("The size of integer is %u\n", sizeof(n)); 

y deberías deshacerte de esa advertencia.

Creo que deberías escribir esto en su lugar:

 printf("The size of integer is %d\n", sizeof(int));