Freetype 2,构建视觉工作室2015

时间:2016-04-30 15:38:11

标签: c++ freetype freetype2

获得以下警告:

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*是相当奇怪的。

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

1 个答案:

答案 0 :(得分:0)

  

FT_UInt是typedef unsigned int,所以将int转换为void *会很奇怪。

实际上并非如此。它非常好,允许在整数和指针之间进行转换。这个的一个特殊应用是一个函数的“用户参数”,你可以在函数中注册整数或指针以及函数回调。

然而,双重类型转换(void*)(unsigned long)是一个解决问题的方法。不能保证可能导致指针的各种问题(即未定义的行为)的sizeof(unsigned ling) >= sizeof(void*)被截断。

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

  

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

在这种特殊情况下,它可能不是问题的原因,因为该指针将被转换回FT_UInt。从长远来看,提交问题并更改FT_List_Find的原型以接受uintptr_t而不是指针是有意义的。不幸的是,这也会打破很多现有的计划。