I'm working on the K64F freedom board trying to port some code and running into an issue when trying to work with 64-bit types. The following snippet
snprintf(text, idx, "%"PRId64"", val);
produces the following warning
warning: format '%d' expects argument of type 'int', but argument 4 has type 'int64_t' [-Wformat=]
at compile time. Digging into inttypes.h which defines PRId64 I found that it's dependant on the define __have_longlong64 to correctly set PRId64 to the expected value of lld as expected by snprintf. When I look at
I see that there are a few different versions of the stdint.h header, specifically I see the following
- toolchain/arm-none-eabi/include/stdint.h
- toolchain/lib/gcc/arm-none-eabi/4.8.4/include/stdint.h
- toolchain/lib/gcc/arm-none-eabi/4.8.4/include/sdtint-gcc.h
File #2 essentially wraps #3. They don't define __have_longlong64, even though the code completion shows that an int64_t expands to long long int. It also seems that trying to print an int64_t by manually specifying %lld doesn't work and just results ld being printed.