Freetype 2,构建视觉工作室 2015

Freetype 2, building visual studio 2015

本文关键字:工作室 2015 视觉 构建 Freetype      更新时间:2023-10-16

收到以下警告:

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 无符号 int,因此将 int 转换为 void* 是相当奇怪的。

其实不然。它完全没问题,允许在整数和指针之间进行转换。它的一个特定应用是函数的"用户参数",您可以在其中将整数或指针与函数回调一起注册。

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

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

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

在这种特殊情况下,它可能不会引起问题,因为该指针将被强制转换为FT_UInt。从长远来看,提交问题并更改FT_List_Find原型以接受uintptr_t而不是指针是有意义的;不幸的是,这也将破坏许多现有程序。