什么是格式说明符%qi的msvc兼容版本?

时间:2014-08-23 09:38:44

标签: visual-c++ c99

移植一些gcc代码,遇到错误"表达式:(格式说明符不正确),0"。我查看了什么是传递给sprintf(由我定义)及其%qi。从我在谷歌看到的,它是某种c99的东西。什么是(如果有的话)msvc可联合版本?

说明符的用法如下:

(void)snprintf(val, 64, "%"PRIi64, node_data->intval);

并定义:(在项目附带的inttypes.h中)

#define __PRI_64_LENGTH_MODIFIER__ "q"
#define PRIi64        __PRI_64_LENGTH_MODIFIER__ "i"

node_data-> intval似乎是uint64_t

1 个答案:

答案 0 :(得分:0)

PRIi64(及其等效的PRId64)是用于64字节整数的跨平台C99格式说明符。

MSVC不支持C99,但它有自己的格式说明符 - "%I64d"(如果您希望"%I64i"超过i,则为d)。< / p>

您发布的标头文件来源的旁注:这似乎是GCC的inttypes.h,一个C99标准文件。以下是它定义PRIi64

的方式

在GCC中,%q(扩展名)格式前缀表示“四元组”。它用于quad_t GCC类型,定义为typedef long long int quad_t;(无符号版本:typedef unsigned long long int u_quad_t;)。它可以与标准数字格式一起使用:"%qd %qi %qo %qu %qx %qX %qn"

如果您想减少对代码本身的更改,您只需修改您正在使用的标头中的#define,并将GCC的%q格式前缀替换为MSVC的%I64格式前缀:

#define __PRI_64_LENGTH_MODIFIER__ "I64"