[LLVMdev] Say hi to VMKit: JVM/LLVM, CLI/LLVM

Eric Gouriou eric.gouriou at pobox.com
Thu Mar 27 14:18:28 PDT 2008


On Mar 26, 2008, at 12:23 PM, Török Edwin wrote:
[...]
>> 2) ISO C++ does not support %jd. x86_64 does not know about %lld?
>>
>
> It does, but gcc gives a warning, if I use %lld I get a warning on
> x86_64, if I %ld I get a warning on x86-32.
> int64_t is long int on x86-64. However sizeof(long int) == sizeof(long
> long int), so I don't know why gcc insists it is wrong.
> I only found %jd which doesn't give warnings on either:
>
> #include <stdio.h>
> #include <stdint.h>
> int main()
> {
>        int64_t x=0;
>        printf("%ld",x);
>        printf("%lld",x);
>        printf("%jd",x);
>        return 0;
> }
>
> $ gcc -Wall -O2 p.c
> p.c: In function ‘main’:
> p.c:7: warning: format ‘%lld’ expects type ‘long long int’, but  
> argument
> 2 has type ‘int64_t’
> $ gcc -Wall -O2 p.c -m32
> p.c: In function ‘main’:
> p.c:6: warning: format ‘%ld’ expects type ‘long int’, but argument 2  
> has
> type ‘int64_t’

  To print a int64_t value, use PRId64 from inttypes.h if you can.

#include <inttypes.h>

int64_t x = ...;
printf("x=%"PRId64"\n", x);

  It's ugly at first, but portable (provided inttypes.h ...).

  Eric





More information about the llvm-dev mailing list