对于非8位字符的平台,应该考虑哪种考虑?
幻数出现,例如在换挡时;
通过使用CHAR_BIT和UCHAR_MAX而不是8和255(或类似的值),可以很简单地处理其中的大多数。
希望您的实现定义了这些:)
这些是“常见”问题。
另一个间接问题是说您有:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
在一个平台上,这可能(仅)占用(最佳情况下)24位,而在其他平台上则可能占用例如72位.....
如果每个uchar都具有“位标志”,并且每个uchar仅具有您当前正在使用的2个“重要”位或标志,并且您仅将它们组织成3个uchar来进行“澄清”,那么它可能相对“更浪费”,例如具有24位uchar的平台.....
位域无法解决所有问题,但它们还有其他需要注意的地方...。
在这种情况下,一个枚举可能是获取您实际需要的“最小”大小的整数的一种方法。
也许不是一个真实的例子,但是当移植/使用一些代码时,这样的东西“有点”我...
实际上,如果uchar的大小是“正常”所期望的大小的三倍,那么在某些平台上100个这样的结构可能会浪费大量内存.....在“正常”情况下,这没什么大不了的。 。
因此由于假设uchar在一个平台(相对于可用RAM)上比在另一个平台上“不是很浪费”,所以事情仍然可能被“破坏”,或者在这种情况下“非常快速地浪费大量内存”。 ..
这个问题可能会更加突出,例如对于int或其他类型,例如您有一些需要15位的结构,因此您将其粘贴在int上,但在其他平台上int是48位或其他类型。 。
“通常”,您可以将其分成2个uchar,但是例如使用24位uchar,则只需一个即可。
因此,枚举可能是更好的“通用”解决方案...。
取决于您如何访问这些位:)
因此,无论uchar或uint的大小如何,即使代码仍然可以正常工作/运行,也可能会冒出“设计缺陷”。
即使您的代码中没有“魔术数字”,也有一些类似的事情需要提防...
希望这是有道理的:)