有没有办法修复stdint类型的格式说明符警告?

时间:2015-07-26 22:19:53

标签: c printf typedef stdint

问题是在一个平台上(windows,mvsc2015)uint64_t被定义为unsigned long long而另一个(ubuntu,clang)被定义为unsigned long并且代码看起来像 sprintf(buffer, "%#llx", u64key);

3 个答案:

答案 0 :(得分:10)

解决方案是使用C99的格式宏,特别是PRIu64 uint64_t

#include <inttypes.h>
…
sprintf(buffer, "%#" PRIu64 "\n", u64key);

答案 1 :(得分:4)

Pascal的解决方案对于这种特定类型来说是最直接和最惯用的,但是对于记录来说,打印任意整数类型的替代方法,其定义您不知道只是转换为intmax_t或{{1}然后使用uintmax_t修饰符(例如j%jd)。然而,这可能不适用于大多数/所有版本的MSVC标准库实现,因为它们在标准一致性方面落后了。

答案 2 :(得分:-1)

您可以使用预处理程序指令来检测数据类型的定义方式,并使用不同的字符串编译另一个sprintf()。