我目前有一個關於警告的問題。我有一個方法返回一個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