(GCC) Dollar-Zeichen in printf format string
Ich habe die folgende Zeile im source-code in C geschrieben:
printf("%2$d %1$d", a, b);
Was bedeutet es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe die folgende Zeile im source-code in C geschrieben:
printf("%2$d %1$d", a, b);
Was bedeutet es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein Erweiterung der Sprache Hinzugefügt von POSIX (C11-konform Verhalten sollten, wie beschrieben, in der eine Antwort von @chux). Notation
%2$d
bedeutet das gleiche wie%d
(output signed integer), außer es Formate die parameter mit gegeben 1-basierte Nummer (in Ihrem Fall ist es einen zweiten parameter,b
).So, wenn Sie den folgenden code ausführen:
erhalten Sie
2 3
in der standard-Ausgabe aus.Mehr info finden Sie auf printf man-Seiten.
Pro die C-spec C11dr 7.21.6.1
Als Teil einer print-format, der erste
%
im"%2$d %1$d"
stellt eine Richtlinie. Diese Richtlinie kann verschiedene flags, width, precision, Länge modifier und schließlich einem umwandlungsspezifikator. In diesem Fall2
ist eine Breite. Das nächste Zeichen$
ist weder eine Präzision, Länge modifier noch umwandlungsspezifikator. Also seit der Umstellung Spezifikation ist ungültig,... das Verhalten ist undefiniert. C11dr 7.21.6.1 9
Den C-spec diskutiert über die zukünftige Bibliothek Richtungen. Kleinbuchstaben können in Zukunft Hinzugefügt werden, und andere Zeichen können verwendet werden in extensions. Natürlich
$
ist nicht ein Kleinbuchstabe, so dass ist gut für die Zukunft. Es passt sicherlich die "anderen Charakter" - Rolle als$
ist auch nicht Teil der C-Zeichensatz.In verschiedenen *nix-Implementierungen
$
verwendet wird, wie beschreiben, in Linux Programmer ' s Manual PRINTF(3). Die$
zusammen mit der vorhergehenden integer definiert das argument index der Breite.