Verwendung von "zd" Planer mit `printf()`?

Suche nach Klärung über die Verwendung "zd" mit printf().

Sicherlich die folgende korrekt mit C99 und später.

void print_size(size_t sz) {
  printf("%zu\n", sz);
}

Den C-spec scheint ermöglichen printf("%zd\n", sz) je nachdem, wie es gelesen wird:

7.21.6.1 Die fprintf Funktion

z Gibt an, dass eine folgende d, i, o, u, x, oder X umwandlungsspezifikator gilt für eine size_t oder die zugehörigen Ganzzahl-Typ-argument oder eine folgende n umwandlungsspezifikator gilt für einen Zeiger auf ein signed-integer-Typ entsprechend size_t argument. C11dr §7.21.6.1 7

Sollte dieser gelesen werden, als

  1. "z Gibt an, dass eine folgende d ... umwandlungsspezifikator gilt für eine size_t oder die zugehörigen Ganzzahl-Typ-argument ... "(beide Arten) und "z Gibt an, dass eine folgende u ... umwandlungsspezifikator gilt für eine size_t oder die zugehörigen Ganzzahl-Typ-argument ..." (beide Arten)

ODER

  1. "z Gibt an, dass eine folgende d ... umwandlungsspezifikator gilt für eine entsprechende unterzeichnete Ganzzahl-argument ..." (signed type) und "z Gibt an, dass eine folgende u ... umwandlungsspezifikator gilt für eine size_t" (unsigned Typ).

Habe ich mit der #2 definition, aber jetzt nicht so sicher.

Was ist richtig, 1, 2, oder etwas anderes?

Wenn #2 ist richtig, was ist ein Beispiel für einen Typ, können "%zd"?

InformationsquelleAutor chux | 2015-10-02

Schreibe einen Kommentar