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



在移植一些gcc代码时,遇到一个错误"Expression:(不正确的格式说明符),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

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

MSVC不支持C99,但是它有自己的格式说明符——"%I64d"(或者"%I64i",如果你喜欢i而不是d)。

关于你发布的头文件来源的旁注:这似乎是GCC的inttypes.h,一个c99标准文件。下面是它如何定义PRIi64:

在GCC中,%q(扩展)格式前缀表示"quad"。它用于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,并用MSVC的%I64格式前缀替换GCC的%q格式前缀:

#define __PRI_64_LENGTH_MODIFIER__ "I64"

最新更新