web-dev-qa-db-fra.com

Le spécificateur% zu est-il requis pour printf?

Nous utilisons C89 sur une plateforme embarquée. J'ai tenté d'imprimer un size_t, Mais cela n'a pas fonctionné:

#include <stdio.h>
int main(void) {
    size_t n = 123;
    printf("%zu\n",n);
    return 0;
}

Au lieu de 123, J'ai zu.
D'autres spécificateurs fonctionnent correctement.

Si size_t existe ne devrait pas zu être également disponible dans printf?
Est-ce que je dois contacter le vendeur de ma bibliothèque ou une implémentation de bibliothèque est-elle autorisée à l'exclure?

11
Trevor Hickey

Si size_t existe, zu ne devrait-il pas également être disponible dans printf?

size_t existait au moins depuis C89 mais le spécificateur de format respectif %zu (en particulier le modificateur de longueur z) a été ajouté à la norme uniquement depuis C99.

Donc, si vous ne pouvez pas utiliser C99 (ou C11) et que vous deviez imprimer size_t en C89, il vous suffit de recourir à d'autres types existants, tels que:

printf("%lu\n", (unsigned long)n);
11
P.P.