C语言 PRIu64 宏
生活随笔
收集整理的這篇文章主要介紹了
C语言 PRIu64 宏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題
開發時遇到一個問題,同一份代碼要分別編譯跑在 32 位和 64 位 CPU 上,部分代碼如下
uint64_t a; char a_str[20] = {0};a = 0x1234; sprintf(a_str, "%llu", a);使用 64 位編譯器,編譯報警告:uint64_t 是 long unsigned int 類型,請使用 "%ld"。
然后改成 “%ld”,使用 32 位機器編譯時,又報警告了:uint64_t 是 long long unsigned int 類型,請使用 "%lld"。
兩者不能得兼?
解決
后來查到可以使用 PRIu64 宏,即代碼改為如下:
uint64_t a; char a_str[20] = {0};a = 0x1234; sprintf(a_str, "%"PRIu64, a);兩種編譯器都不報警告了。
探究
PRIu64 的定義在 inttypes.h 頭文件里。
# if __WORDSIZE == 64 # define __PRI64_PREFIX "l" # else # define __PRI64_PREFIX "ll" # endif# define PRIu64 __PRI64_PREFIX "u"可以看到,
32 位編譯器,會把 "%"PRIu64 擴展為 "%lld",
64 位編譯器,會把 "%"PRIu64 擴展為 "%ld",
解決了這個問題。
總結
以上是生活随笔為你收集整理的C语言 PRIu64 宏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络技术(二)——数据通信
- 下一篇: Phononpy的简单使用