我有一个用C和C++编写的开源代码库。我正在寻找一个整数类型,保证至少64位宽,它可以可靠地编译在大多数OS (英特尔,64位)和Linux盒与开源C和C++编译器,而没有太多的额外工作的最终用户。此时,Windows和32位客户端支持并不重要。
我在OS上做了一些测试,开发工具附带的最新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++代码,考虑到上面的目标,他们可能会对更好的长期方法提出一些建议。
发布于 2012-09-17 23:15:11
long long
和unsigned long long
类型是标准C类型和标准C++类型,每种类型都至少有64位。我所知道的所有编译器都提供了这些类型,除非是在-pedantic
模式下,但在这种情况下,int64_t
或uint64_t
也不能在预C++ 2011编译器中使用。在所有的系统中,<stdint.h>
也是可用的。也就是说,据我所知,你怎么拼写这个类型并不重要。<stdint.h>
的主要目标是为特定数量的比特提供最佳匹配。如果您至少需要64位,但也希望利用这种类型的快速实现,您可以使用来自int_least64_t
或uint_least64_t
的<stdint.h>
或<cstdint>
(在后者的情况下,名称是在名称空间std
中定义的)。
https://stackoverflow.com/questions/12468281
复制相似问题