[英]<stdint.h> or standard types?
在Linux上进行C ++编程时应该使用哪些类型? 使用stdint.h
类型(例如int16_t
和uint8_t
是个好主意吗?
一方面,肯定无法在Windows上使用stdint.h
进行编程。 但是,另一方面, short
眼的大小在第一批眼睛上还不清楚。 而且,编写int8_t
而不是char
甚至更加直观。
C ++标准是否保证标准类型的大小将来不会改变?
首先,Microsoft的实现确实支持 <stdint.h>
。
为您的工作使用适当的类型。
例如,如果您需要一个正好16位宽且没有填充位的无符号类型,请使用在<stdint.h>
定义的uint16_t
。
如果需要宽度至少为 16位的无符号类型,则可以使用uint_least16_t
或uint_fast16_t
或short
或int
。
您可能不需要像您想的那样经常使用精确宽度类型。 通常,重要的不是类型的确切大小,而是它支持的值的范围。 但是,当您连接某些外部定义的数据格式时,精确的表示很重要。 在这种情况下,您应该已经有声明,告诉您要使用的类型。
对预定义类型的范围有特定要求: char
至少为8位, short
和int
至少为16位, long
至少为32位, long long
至少为64位。 另外, short
至少与char
一样宽, int
至少与short
一样宽,依此类推。 (标准指定了最小范围,但是最小大小可以从范围和需要二进制表示的事实中得出。)
请注意, <stdint.h>
是C头。 如果您#include
它在C ++程序中,则类型名称将直接导入到全局名称空间中,并且可能会也可能不会导入到std
名称空间中。 如果您#include <cstdint>
,则类型名称将被导入到std
名称空间中,并且可能会也可能不会被导入到全局名称空间中。 宏名称(例如UINT32_MAX
不在任何名称空间中; 他们始终是全球性的。 您可以使用任何版本的标题; 只是在使用或不使用std::
前缀方面保持一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.