<stdint.h>还是标准类型?

时间:2016-11-02 18:53:20

标签: c++

在Linux上编写C ++时,我应该使用哪些类型?是否应该使用stdint.h中的类型,例如int16_tuint8_t

一方面,肯定stdint.h无法在Windows上进行编程。另一方面,例如short在第一批眼中并不清楚。写int8_t而不是char ...

更直观

C ++标准是否保证,未来标准类型的大小将保持不变?

2 个答案:

答案 0 :(得分:4)

首先,微软的实施does support <stdint.h>

使用适当的类型来处理您正在做的事情。

例如,如果您需要一个16位宽且无填充位的无符号类型,请使用uint16_t中定义的<stdint.h>

如果您需要至少 16位宽的无符号类型,则可以使用uint_least16_tuint_fast16_tshort或{{1 }}

您可能不像您认为的那样经常需要精确宽度类型。通常重要的不是类型的确切大小,而是它支持的值的范围。但是,当您与某些外部定义的数据格式连接时,精确表示非常重要。在这种情况下,您应该已经有声明告诉您要使用的类型。

对预定义类型的范围有特定要求:int至少为8位,charshort至少为16位,int位于至少32位,long至少为64位。此外,long long至少与short一样宽,char至少与int一样宽,依此类推。 (该标准规定了最小范围,但最小尺寸可以从范围和需要二进制表示的事实中推导出来。)

请注意short是C标头。如果您在C ++程序中<stdint.h>,则类型名称将直接导入全局名称空间,而可能也可能不会导入#include名称空间。如果您std,则类型名称将导入#include <cstdint>命名空间,而可能也可能不会导入全局命名空间。诸如std之类的宏名称不在任何名称空间中;他们总是全球化的。您可以使用任一版本的标题;只是对使用或不使用UINT32_MAX前缀保持一致。

答案 1 :(得分:3)

C ++标准没有详细说明整数类型的大小(例如intlongchar)。如果你想确定,某个类型在不同平台上具有固定的大小,你可以使用C ++ 11的Fixed-width integer types,它们是标准化的,并保证给定大小。

要使用它们,#include <cstdint>

  

C ++标准是否保证,未来标准类型的大小将保持不变?

不太可能。在8位计算机上,整数类型的大小与现在的大小不同。将来,在2042年,使用1024位计算机,我假设long long为1024位长。

但是,我们几乎可以肯定,std::uint32_t将保持32位长。