Printf long long int in C mit GCC?

Lesezeit: 3 Minuten

Wie drucke ich f long long int und auch unsigned long long int in C99 mit GCC?

Ich habe die anderen Beiträge durchsucht, die die Verwendung vorschlagen %lld aber es gibt diese Warnungen:

Warnung Nr. 1: Unbekanntes Konvertierungstypzeichen „l“ im Format [-Wformat]|
Warnung Nr. 2: zu viele Argumente für das Format [-Wformat-extra-args]|

Für folgenden Versuch:

#include <stdio.h>

int main()
{
   long long int x = 0;
   unsigned long long int y = 0;
   printf("%lld\n", x);
   printf("%llu\n", y);
}

  • Hast du die benutzt -std=c99 Flag beim Kompilieren?

    Benutzer529758

    27. November 2012 um 18:33 Uhr

  • Ich erhalte keine Warnungen: i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Basierend auf Apple Inc. Build 5658) (LLVM Build 2335.15.00)

    – MK.

    27. November 2012 um 18:34 Uhr


  • @netcoder: Ich bin mir nicht sicher, wie ich nach der Version suchen soll. Ich verwende gcc unter Windows x86.

    – Benutzer963241

    27. November 2012 um 18:42 Uhr

  • Ah, es ist die gcc-Version 4.6.1. Danke @effeffe.

    – Benutzer963241

    27. November 2012 um 18:57 Uhr

  • Welche Windows-Version verwendest du?

    – effe

    27. November 2012 um 21:20 Uhr

Benutzeravatar von nos
Nr

Wenn Sie unter Windows arbeiten und mingw verwenden, verwendet gcc die win32-Laufzeit, wo printf benötigt wird %I64d für eine 64-Bit-Ganzzahl. (und %I64u für eine 64-Bit-Ganzzahl ohne Vorzeichen)

Für die meisten anderen Plattformen, die Sie verwenden würden %lld zum Drucken lange lang. (und %llu wenn es unsigniert ist). Dies ist in C99 standardisiert.

gcc wird nicht mit einer vollständigen C-Laufzeit geliefert, sondern hängt von der Plattform ab, auf der es ausgeführt wird. Daher müssen Sie im Allgemeinen die Dokumentation für Ihre spezielle Plattform konsultieren – unabhängig von gcc.

  • Ich stimme Ihnen und den Moderatoren auch zu, aber die SO ist nicht wirklich für diese Art von Thread … Wenn Sie Ihren Kommentar hier lassen, kann es zu Chaos kommen.

    – Jack

    27. November 2012 um 18:59 Uhr

  • Also, ist es eine nicht standardmäßige Methode, dies in Windows zu tun? Darf ich einen anderen Compiler kennen, der die Standardregeln für Windows x86 vollständig unterstützt und befolgt?

    – Benutzer963241

    27. November 2012 um 19:02 Uhr


  • Warnung: Verwechseln Sie das große „i“ in „%I64d“ nicht mit dem kleinen L. Ich habe gerade diesen Fehler gemacht.

    – Adayah

    29. Juli 2015 um 18:02 Uhr

  • Es kann sich lohnen, diese Definition zu beachten __USE_MINGW_ANSI_STDIO=1 wird mingw dazu bringen, ein Standard-stdio zu verwenden. Dies ist auch deshalb nützlich, weil Windows’ printf %n nicht versteht.

    – Shahbaz

    16. November 2016 um 0:54 Uhr

  • Beachten Sie, dass msvcrt von modernem Windows (nach Windows XP) unterstützt wird %lld %llX. Um das Programm konsistent zum Laufen zu bringen, können Sie die von @Shahbaz erwähnte Methode verwenden, damit Sie das Seltsame nicht verwenden müssen %I64d Sachen.

    – raymai97

    18. Dezember 2016 um 3:52 Uhr


Für portablen Code sind die Makros in inttypes.h könnte genutzt werden. Sie werden auf die richtigen für die Plattform erweitert.

ZB für 64-Bit-Integer das Makro PRId64 kann verwendet werden.

int64_t n = 7;
printf("n is %" PRId64 "\n", n);

  • So sehr ich diese Makros auch hasse, sollte dies die richtige Antwort sein – obwohl sie spät kam. Übrigens int64_t ist nicht garantiert vorhanden. Die _least Versionen sind garantiert. Vielleicht kennst du das aber schon.

    – Pryftan

    11. Februar um 15:08 Uhr

Benutzeravatar von effeffe
Effekt

Versuchen Sie, Ihren Compiler zu aktualisieren, ich verwende GCC 4.7 unter Windows 7 Starter x86 mit MinGW und es lässt sich mit den gleichen Optionen sowohl in C99 als auch in C11 gut kompilieren.

  • Können Sie bitte einen Link zum Änderungsprotokoll für die Version GCC 4.7 hinzufügen?

    – Benutzer963241

    27. November 2012 um 21:00 Uhr


  • @user963241: hmm, kann nichts finden… gcc.gnu.org/gcc-4.7 vielleicht geht es um MinGW, aber ich kann im Moment nicht auf ihre Seite zugreifen.

    – effe

    27. November 2012 um 21:11 Uhr


  • Wurde der neueste GCC 4.7-Compiler mit MinGW geliefert? Ich habe gerade versucht, MinGW herunterzuladen und zu installieren, aber es hat meinen Compiler nicht auf Version 4.7 aktualisiert.

    – Benutzer963241

    27. November 2012 um 21:42 Uhr


  • Ich habe es, also ja. Vielleicht benutzt du noch irgendwie die alte Version.

    – effe

    27. November 2012 um 21:59 Uhr

  • Ich denke, es könnte sein, dass ich eine alte Windows-Version verwende und nicht den Compiler. Ich werde es trotzdem mit dem neuesten Compiler versuchen.

    – Benutzer963241

    27. November 2012 um 22:01 Uhr

Benutzeravatar von Tommy Wang
Tommy Wang

Sie können die Einstellungen von ausprobieren code::blockes gibt einen Compiler …, dann wählen Sie im C-Modus aus.

Geben Sie hier die Bildbeschreibung ein

1415990cookie-checkPrintf long long int in C mit GCC?

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

Privacy policy