移植一些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
答案 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"