Was ist PRIu64 in C?

Lesezeit: 1 Minute

Benutzeravatar von torr
Torr

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?

Benutzeravatar von hmjd
hmjd

PRIu64 ist ein in C99 eingeführter Formatbezeichner zum Drucken uint64_two 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 .

  • @torr Es hängt von den Entscheidungen Ihrer Hardware, Ihres Betriebssystems, Ihres Compilers und Ihrer Bibliothek (zusammenfassend als “die Implementierung” bezeichnet) ab, ob oder nicht PRIu64 erweitert sich zu "llu". Bei einigen Implementierungen kann es erweitert werden auf "u"stattdessen bedeutet das "%u" zum Drucken geeignet wäre uint64_t Werte. Darauf sollte man sich aber nicht verlassen. Es gibt keine anderen tragbar Wege zu drucken uint64_t Werte, mit denen Sie zufrieden sind.

    – autistisch

    31. Mai 2013 um 14:46 Uhr


1417540cookie-checkWas ist PRIu64 in C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy