閱讀我有這樣的typedef:16位位域導致*從未初始化的內存*警告
typedef union
{
unsigned Value;
unsigned Timestamp:16;
} BITFIELD;
,並得到這個編譯器警告:
BITFIELD bitfield;
// read from uninitialised memory - may result in unexpected behaviour
bitfield.Timestamp = 12;
現在,當我用很短的,而不是警告消失的位域:
typedef union
{
unsigned Value;
unsigned short Timestamp;
} DATATYPE;
我不知道該怎麼想這個警告 - 我不明白。沒有未初始化的內存涉及,也沒有讀取操作。恕我直言編譯器(VisualDSP ++ 5.0 C/C++編譯器)在這裏是錯誤的。警告消失,當我使用:32
位字段時間戳。
有沒有什麼我沒有意識到?我可以放心地忽略這個警告嗎?
您可以使用顯式類型而不是實現特定的類型(像uint32_t或等效的東西)?這可能會使錯誤更加清晰,並且在錯位時更清晰。 – 2010-06-30 13:18:04