Ale*_*lds 40 c c++ types int64 long-long
我有一个用C和C++编写的开源代码库.我正在寻找一个保证至少 64位宽的整数类型,可以使用开源C和C++编译器在大多数OS X(Intel,64位)和Linux机器上可靠地编译,而不需要太多对最终用户的额外工作.Windows和32位客户端支持目前并不重要.
我在OS X上做了一些测试,开发人员工具附带的最新GCC不支持C + 11模式(因此似乎不保证可用性long long).Clang也不支持这一点,但是long long在某个版本之后它支持C99模式.
当便携性是一个重要目标时,是否使用一般建议int64_t代替long long?使用格式说明符似乎很痛苦.
我是否可以可靠地转换int64_t为long long(以及unsigned与之等效uint64_t)以将其long long用作现有函数和库作为参数?(当然,又回来了.)
在这种心态下,如果我发布的代码需要Clang功能而不是GCC,那么Clang是否会取代GCC作为Linux上的首选编译器?在大多数情况下,在为最终用户提供源代码时,这个编译器是我可以期待的吗?
基本上,我想向其他开发人员提出一些建议,他们使用这两种类型的可移植C和C++代码,考虑到上述目标,他们可能会对可能是更好的长期方法提出一些建议. .
Die*_*ühl 33
的类型long long和unsigned long long是标准C和标准C++类型与至少64位.我所知道的所有编译器都提供这些类型,除非在某种-pedantic模式下,但在这种情况下,int64_t或者在uint64_tC++ 2011之前的编译器中也不可用.在所有系统上<stdint.h>都可用.也就是说,据我所知,你拼写这个类型并不重要.主要目标<stdint.h>是为特定位数提供最佳匹配.如果你需要至少64位,但你也想利用这种类型的禁止实现,你可以使用int_least64_t或uint_least64_t来自<stdint.h>或<cstdint>(如果是后者,名称在名称空间中定义std).
Dan*_*her 26
当便携性是一个重要目标时,是否使用一般建议
int64_t代替long long?
如果编译器提供int64_t但不是,我会感到非常惊讶long long.
如果long long存在,则它必须至少有64位,因此从(u)int64_tto转换(unsigned) long long为值保留.
如果你需要一个类型正好 64位,用途(u)int64_t,如果你需要至少 64位,(unsigned) long long是完全正常的,因为会(u)int_least64_t.