我有一个用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中定义的)。
发布于 2012-09-17 23:12:26
当可移植性是一个重要的目标时,是否建议使用
int64_t来代替long long?
如果编译器提供int64_t而不是long long,我会感到非常惊讶。
如果long long存在,它必须至少有64位,因此从(u)int64_t到(unsigned) long long的转换是保持价值的。
如果您需要精确的64位类型,请使用(u)int64_t,如果您至少需要64位,(unsigned) long long是非常好的,就像(u)int_least64_t一样。
发布于 2020-05-11 14:43:19
使用int64_t. int64_t意味着64位,无论您走到哪里,您都会得到64位。long long实际上与执行依赖于long一样。也就是说,一个长的长必须大于或等于一个长,但这可能是不同的,取决于编译器和平台。
https://stackoverflow.com/questions/12468281
复制相似问题