首页 文章

无符号int C可移植性[关闭]

提问于
浏览
1

是否有针对'unsiged integer'定义的缩短标签typedef,适用于大多数/所有平台?我在Windows中看到了uint或UINT,但是理解这并不是在其他平台上一贯实现的 . 我很乐意为每个实例输入'unsigned int',但如果有一个标准的typedef(比如'uint',虽然没有一贯实现),我会用它 . 我怀疑在进行一些研究后情况并非如此,但人们可能对此有一些了解 . C 11等,或* nix / Windows上实现相同标签的标准标头 . 我对严格指定unsigned int的位大小并不感兴趣:它仅用于低迭代循环 .

3 回答

  • 2

    unsigned int 的缩写是 unsigned . 同样, long int 可以缩短为 longunsigned long int 可以缩短为 unsigned long .

    此规则有一个例外: signed charunsigned char 可以缩短为 char .

  • 1

    基本上,类型大小由您正在使用的编译器以及目标程序(可执行文件)将在其上运行的平台定义 .

    例如,在x86机器上,几乎所有编译器都将 int (因此 unsigned int )表示标准的32位整数 . 但是,在假设的128位CPU上, int 可能会引用64位或128位整数 .

    但是,如果你像我一样并坚持要知道你的整数大小是什么,我建议你查看 cstdint Headers ,这是在C 11中引入的 .

    这允许您独立于编译器和平台指定特定大小的整数(例如 uint32_t ) . 但请注意,如果某个特定平台不支持该大小,您的程序将无法编译 .

    查看此站点以获取更多详细信息:http://www.cplusplus.com/reference/cstdint/使用 #include <stdint.h> 表示C和 #include <cstdint> 表示C.

  • 1

    语言标准和标准库没有为类型定义任何“普通”别名,除了提供替代名称之外,这些别名没有用处 .

    标准库确实定义了几个具有平台相关含义的类型别名 . 例如,整数类型 std::uintptr_t 是一个足以表示任何对象指针值的整数类型; std::max_align_t 是一种类型,其 alignof -value是平台提供的最大值 . 其他类型别名是条件定义的 std::uint32_t 等,如果它们存在,则是具有二进制补码表示的固定宽度的整数类型 . 当然,这些只是其中一种基本类型的typedef,但意义不同,并且这些都不是微不足道的,所以有充分的理由拥有这些typedef .

相关问题