Visual c++ 格式说明符%qi的msvc兼容版本是什么?
在移植某些gcc代码时,遇到错误“表达式:(不正确的格式说明符),0”。我检查了传递给sprintf的内容(由我定义)及其%qi。从我在谷歌看到的情况来看,它有点像c99。msvc兼容版本是什么(如果有的话) 使用的说明符如下所示:Visual c++ 格式说明符%qi的msvc兼容版本是什么?,visual-c++,c99,Visual C++,C99,在移植某些gcc代码时,遇到错误“表达式:(不正确的格式说明符),0”。我检查了传递给sprintf的内容(由我定义)及其%qi。从我在谷歌看到的情况来看,它有点像c99。msvc兼容版本是什么(如果有的话) 使用的说明符如下所示: (void)snprintf(val, 64, "%"PRIi64, node_data->intval); 并定义:(在项目附带的inttypes.h中) 节点_data->intval似乎是uint64PRIi64(及其等效的PRId64)是用于64字节
(void)snprintf(val, 64, "%"PRIi64, node_data->intval);
并定义:(在项目附带的inttypes.h中)
节点_data->intval似乎是uint64PRIi64
(及其等效的PRId64
)是用于64字节整数的跨平台C99格式说明符
MSVC不支持C99,但为此它有自己的格式说明符-%I64d
(或者%I64i
,如果您更喜欢i
而不是d
)
您发布的头文件来源的旁注:这似乎是GCC的inttypes.h
,一个C99标准文件。下面是它如何定义PRIi64的:
在GCC中,%q
(扩展名)格式前缀表示“quad”。它用于quad\u t
GCC类型,定义为typedef long long int quad\t代码>(无符号版本:typedef无符号长整型四元组;
)。它可以与标准数字格式一起使用:%qd%qi%qo%qu%qx%qx%qn“
如果要减少对代码本身的更改,只需修改正在使用的标题中的#define
,并用MSVC的%I64
格式前缀替换GCC的%q
格式前缀:
#define __PRI_64_LENGTH_MODIFIER__ "I64"
您可以在此处查找适当的案例说明符:如果您提供有关您在sprintf中使用%qi的更多信息,这将为回答者提供更多信息。我还没有找到它,我怀疑它是在宏中某个地方找到的。我想我找到了它,请给我一分钟时间了解它是如何结合在一起的我想我也找到了等效的-%I64i
#define __PRI_64_LENGTH_MODIFIER__ "I64"