我了解固定宽度类型的概念,但是参考文献提供的解释让我很困惑:
带符号整数类型,宽度分别恰好为8、16、32和64位 没有填充位并且对负值使用2的补码 (仅在实现直接支持类型时提供)
据我了解,如果我能够编译应用程序,则所有内容都应在能够运行该应用程序的平台上运行。我有问题:
sizeof(char)
在每个平台上都是一个字节,而不论字节大小在平台之间可能有所不同,这是否意味着可以保证int8_t
和uint8_t
随处可用?答案 0 :(得分:3)
如果实现未提供您使用的类型,则该实现将不存在,并且您的代码将无法编译。在这种情况下,将需要手动移植。
关于您的第二个问题:虽然我们知道sizeof(char) == 1
,但不能保证char
恰好有8位;它可以拥有更多。如果是这种情况,int8_t
和朋友将不存在。
请注意,如果您不需要知道确切的宽度,还有其他类型可以为用例提供足够的保证,例如int_least8_t
或int_fast8_t
。这些为实现留出了更多的自由,使它们更加可移植。
但是,如果您针对的平台不存在常见的整数类型,则无论如何都应该事先知道;因此,花太多时间解决那些最可能不相关的问题是不值得的。这些平台相对来说比较陌生。