我使用以下联合来简化字节、半字节和位操作:
union Byte
{
struct {
unsigned int bit_0: 1;
unsigned int bit_1: 1;
unsigned int bit_2: 1;
unsigned int bit_3: 1;
unsigned int bit_4: 1;
unsigned int bit_5: 1;
unsigned int bit_6: 1;
unsigned int bit_7: 1;
};
struct {
unsigned int nibble_0: 4;
unsigned int nibble_1: 4;
};
unsigned char byte;
};
它的功能很好,但也会生成以下警告:
warning: ISO C++ prohibits anonymous structs [-pedantic]
好的,知道了。但是...如何从g++输出中消除此警告?是否有可能编写类似于此联合体而不出现此问题?
Byte.nibble.n0
或Byte.nibble._<0>()
或Byte.nibble._[0]
或get<0>(Byte.nibble)
,因为你可以在访问时DRY并且删除重复的nibble
,并且可能会在一些商标中进行装饰。 - Yakk - Adam Nevraumontbool bit(unsigned int n) const { return byte & (1 << n); }
。 - Simon Richter