tipos size_t sintaxis para notacion modificadores lenguaje formato especificadores ejemplos dev cientifica c platform-independent size-t format-string format-specifiers

sintaxis - Plataforma independiente size_t Formatos de formato en c?



size_t c (3)

Sí hay. Es %zu (como se especifica en ANSI C99).

size_t size = 1; printf("the size is %zu", size);

Tenga en cuenta que size_t no está firmado, por lo que %ld es doble incorrecto: modificador de longitud incorrecta y especificador de conversión de formato incorrecto. En caso de que se pregunte, %zd es para ssize_t (que está firmado).

Quiero imprimir una variable de tipo size_t en C, pero parece que size_t tiene un alias para diferentes tipos de variables en diferentes arquitecturas. Por ejemplo, en una máquina (64 bits) el siguiente código no arroja ninguna advertencia:

size_t size = 1; printf("the size is %ld", size);

pero en mi otra máquina (32 bits) el código anterior produce el siguiente mensaje de advertencia:

advertencia: el formato ''% ld'' espera el tipo ''long int *'', pero el argumento 3 tiene el tipo ''size_t *''

Sospecho que esto se debe a la diferencia en el tamaño del puntero, por lo que en mi máquina de 64 bits size_t tiene un alias de long int ( "%ld" ), mientras que en mi máquina de 32 bits size_t tiene un alias de otro tipo.

¿Hay un especificador de formato específicamente para size_t ?


Sí: use el modificador de longitud z :

size_t size = sizeof(char); printf("the size is %zd/n", size); // decimal size_t printf("the size is %zx/n", size); // hex size_t

Los otros modificadores de longitud que están disponibles son hh (para char ), h (para short ), l (para long ), ll (para long long ), j (para intmax_t ), t (para ptrdiff_t ) y L (para long double ). Ver §7.19.6.1 (7) del estándar C99.


MSDN , dice que Visual Studio admite el prefijo "I" para código portátil en plataformas de 32 y 64 bits.

size_t size = 10; printf("size is %Iu", size);