Freetype 2,Building Visual Studio 2015

得到以下警告:

ttgload.c(1654): warning C4312: 'type cast': conversion from 'FT_UInt' to 'void *' of greater size

这似乎很奇怪。

有问题的代码行是这样的:

if ( FT_List_Find( &loader->composites,
                   (void*)(unsigned long)glyph_index ) )

并且glyph_index被声明FT_UInt

FT_UInttypedef unsigned int使这是相当奇怪的转换int,以一个void*

有关如何处理此警告的任何想法?

数据狼

FT_UInt是typedef unsigned int,因此将int转换为void *是很奇怪的。

其实不是。很好,可以在整数和指针之间进行转换。此功能的一个特殊应用是对函数的“用户参数”,在该函数中,您将整数或指针与函数回调一起注册。

但是,双重打字(void*)(unsigned long)是解决问题的良方。不能保证sizeof(unsigned ling) >= sizeof(void*)可能导致指针出现各种问题(即未定义的行为)的指针被截断。

当某人想要一个也可以容纳指针的整数时,可以使用的正确类型是uintptr_tand intptr_t

有关如何处理此警告的任何想法?

在这种特殊情况下,它可能不是问题的根源,因为该指针将被投射回FT_UInt。从长远来看,提出一个问题并更改FT_List_Find的原型以接受auintptr_t而不是指针是有意义的不幸的是,这也会破坏许多现有程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章