[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