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
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
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
Tommy Wang
Sie können die Einstellungen von ausprobieren code::blockes gibt einen Compiler …, dann wählen Sie im C-Modus aus.
14159900cookie-checkPrintf long long int in C mit GCC?yes
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