gpt4 book ai didi

c++ - 对于可移植代码,我应该使用 long long 还是 int64_t?

转载 作者:IT老高 更新时间:2023-10-28 12:29:58 27 4
gpt4 key购买 nike

我有一个用 C 和 C++ 编写的开源代码库。我正在寻找一种保证 至少 64 位宽的整数类型,它可以在大多数 OS X(英特尔,64 位)和具有开源 C 的 Linux 机器上可靠地编译和 C++ 编译器,最终用户无需做太多额外的工作。 Windows 和 32 位客户端支持目前并不重要。

我在 OS X 上做了一些测试,开发者工具附带的最新 GCC 不支持 C+11 模式(因此似乎不能保证 long long 的可用性)。 Clang 也不支持这个,虽然它支持 long long 如果启用了 C99 模式,在某个版本之后。

当可移植性是一个重要目标时,一般建议使用 int64_t 代替 long long 吗?使用格式说明符似乎很痛苦。

我能否可靠地将 int64_t 转换为 long long(同样转换为与 uint64_t 等效的 unsigned)将它与以 long long 作为参数的现有函数和库一起使用? (当然又回来了。)

在这种情况下,如果我发布的代码需要 Clang 功能而不是 GCC,那么 Clang 是否会取代 GCC 作为 Linux 上的首选编译器?在向最终用户提供源代码时,大部分情况下我可以期待这个编译器吗?

基本上,我想向其他使用这两种类型的可移植 C 和 C++ 代码的开发人员征求一些建议,鉴于上述情况,他们可能会就什么可能是更好的长期发展方式提出一些建议牢记目标。

最佳答案

类型 long longunsigned long long是标准 C 和标准 C++ 类型,每个类型至少有 64 位。我知道的所有编译器都提供这些类型,除非可能在 -pedantic 中。模式,但在这种情况下 int64_tuint64_t也不适用于 C++ 2011 之前的编译器。在所有系统上<stdint.h>也可用。也就是说,据我所知,你如何拼写类型并不重要。 <stdint.h>的主要目标是为特定数量的比特提供最佳匹配。如果您至少需要 64 位,但又想利用这种类型的快速实现,您可以使用 int_least64_tuint_least64_t来自 <stdint.h><cstdint> (对于后者,名称在命名空间 std 中定义)。

关于c++ - 对于可移植代码,我应该使用 long long 还是 int64_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com