我目前有一个关于警告的问题。我有一个方法返回一个u8
值,其中u8
被定义为unsigned char
。C将无符号字符转换为无符号字符:4
u8 foo (...)
而且在结构内部我有一个构件x
只需要4位。
struct {
u8 x : 4;
u8 y : 4;
} s;
现在我想的foo
的返回值赋给x
。但是,我的编译器会通过从unsigned char
到unsigned char : 4
的转换,引发可能丢失的警告。然而,这样的演员阵容并未得到承认。
struct_inst.x = (u8 : 4)foo(..);
这是什么适当的语法?
您不能像这样在类型转换中表示位宽。尝试使用位掩码来代替:'struct_inst.x = foo(..)& 0x0F;'。顺便说一句你正在使用哪种编译器? –
警告是正确的。除非编译器知道'foo()'返回的值在0..15范围内,否则隐式转换可能会丢失信息。正如@MortenJensen所建议的,位掩码显式丢弃了高位。 –
该警告不会消失。我修改这样 [代码] walker-> height.current = map_get_tile_level(from_x,from_y)代码和0xF [/代码] ,我使用的devkit亲的GCC – WodkaRHR