Ich bin neu in C und werde konfrontiert mit:
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
uint64_t foo = 10;
printf("foo is equal to %" PRIu64 "!\n", foo);
return 0;
}
Und es funktioniert! Ich verstehe nicht warum. Kann mir jemand diesbezüglich weiterhelfen?
PRIu64
ist ein in C99 eingeführter Formatbezeichner zum Drucken uint64_t
wo uint64_t
ist (von verlinkter Referenzseite):
vorzeichenloser ganzzahliger Typ mit einer Breite von jeweils … 64 Bit (wird nur bereitgestellt, wenn die Implementierung den Typ direkt unterstützt)
PRIu64
ist eine Zeichenfolge (Literal), zum Beispiel Folgendes:
printf("%s\n", PRIu64);
Drucke llu
auf meiner Maschine. Benachbarte Zeichenfolgenliterale werden von Abschnitt verkettet 6.4.5 String-Literale des C99-Standards:
In Übersetzungsphase 6, Die Mehrbyte-Zeichenfolgen, die durch eine beliebige Folge benachbarter Zeichen und Wide-String-Literal-Token angegeben werden, werden zu einer einzigen Mehrbyte-Zeichenfolge verkettet. Wenn eines der Token Wide-String-Literal-Token ist, wird die resultierende Multibyte-Zeichenfolge als Wide-String-Literal behandelt; andernfalls wird es als Zeichenkettenliteral behandelt.
Das heisst:
printf("foo is equal to %" PRIu64 "!\n", foo);
(auf meiner Maschine) ist das gleiche wie:
printf("foo is equal to %llu!\n", foo);
Sehen http://ideone.com/jFvKR9 .