[英]GCC ARM C compiler not respecting -std=c99 for %llx printf formatting code
我正在嘗試使用以下方式打印一些64位無符號整數:
uint64_t x = 0xFFFFFFFFFFFFFFFF;
printf("Value: %016llx \n", x);
我得到這個回應:
0000000000000000lx
如果將格式設置字符串更改為%016lx,則會收到有關使用錯誤類型的編譯警告,並且僅輸出低32位:
00000000FFFFFFFF
我的編譯器選項中有-std = c99字符串,該字符串應強制執行ll選項,對嗎?
作為參考,這是隨最新版本的Silicon Labs的Simplicity Studio IDE一起提供的arm-none-eabi-gcc編譯器(v4.7.3)。
你試過這個嗎?
#include <stdio.h>
#include <inttypes.h>
int
main(void)
{
uint64_t n = 0x123456789;
printf("n = %#" PRIx64 "\n", n);
return (0);
}
printf或scanf的實現取決於您使用的libc,可能不支持long long 。 請通過打印PRIx64的值進行檢查-我猜在您的情況下它將是“ lx”而不是“ llx”。
粘貼ARM工具鏈gcc-arm-embedded的inttype.h的一部分
/* 64-bit types */
#if __have_long64
#define __PRI64(x) __STRINGIFY(l##x)
#define __SCN64(x) __STRINGIFY(l##x)
#elif __have_longlong64
#define __PRI64(x) __STRINGIFY(ll##x)
#define __SCN64(x) __STRINGIFY(ll##x)
#else
#define __PRI64(x) __STRINGIFY(x)
#define __SCN64(x) __STRINGIFY(x)
#endif
...
#define PRIx64 __PRI64(x)
#define PRIX64 __PRI64(X)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.