419 Stimmen

Wie man einen int64_t-Typ in C portabel ausgibt

C99-Standard hat Integer-Typen mit Bytes Größe wie int64_t. Ich verwende die Windows %I64d Format derzeit (oder vorzeichenlos %I64u ), wie:

#include <stdio.h>
#include <stdint.h>
int64_t my_int = 999999999999999999;
printf("This is my_int: %I64d\n", my_int);

und ich erhalte diese Compiler-Warnung:

warning: format ‘%I64d’ expects type ‘int’, but argument 2 has type ‘int64_t’

Ich habe es mit versucht:

printf("This is my_int: %lld\n", my_int); // long long decimal

Aber ich bekomme die gleiche Warnung. Ich verwende diesen Compiler:

~/dev/c$ cc -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5664~89/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)

Welches Format sollte ich verwenden, um die Variable my_int ohne eine Warnung zu drucken?

1voto

HarshaD Punkte 203

Ich bin über diese Frage gestolpert, als ich nach einer Möglichkeit suchte, 64-Bit-Zahlen in Hexadezimalwerten anzuzeigen:

Ich habe herausgefunden, dass Sie das verwenden können:

0x%016llx - funktioniert zumindest mit meinem Compiler ( aarch64 GCC 7.3.0 )

-9voto

Daniel Ag Punkte 1

//VC6.0 (386 und besser)

    __int64 my_qw_var = 0x1234567890abcdef;

    __int32 v_dw_h;
    __int32 v_dw_l;

    __asm
        {
            mov eax,[dword ptr my_qw_var + 4]   //dwh
            mov [dword ptr v_dw_h],eax

            mov eax,[dword ptr my_qw_var]   //dwl
            mov [dword ptr v_dw_l],eax

        }
        //Oops 0.8 format
    printf("val = 0x%0.8x%0.8x\n", (__int32)v_dw_h, (__int32)v_dw_l);

Herzliche Grüße.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X