【发布时间】:2009-10-31 11:38:51
【问题描述】:
为什么在 C 或 C++ 中使用“long long”可能是一件坏事?
前几天我正在编译一个运行时库,并在代码中检查 long 是否为 64 位,如果不是,则使用 long long。但与此同时,它会发出 #warning “使用 long long”。我想不出任何理由将“long long”作为警告,除非它是开发人员留下的调试垃圾。
谢谢 陈兹
【问题讨论】:
为什么在 C 或 C++ 中使用“long long”可能是一件坏事?
前几天我正在编译一个运行时库,并在代码中检查 long 是否为 64 位,如果不是,则使用 long long。但与此同时,它会发出 #warning “使用 long long”。我想不出任何理由将“long long”作为警告,除非它是开发人员留下的调试垃圾。
谢谢 陈兹
【问题讨论】:
据我所知,long long 目前仅在 C99 中是标准的。它也是 C++0x 中的一种类型,但大多数现代编译器应该已经支持它。
但是,对于固定大小的整数,可以使用 C99 标头 <stdint.h>,或在 C++ 中使用 <boost/cstdint.hpp>
【讨论】:
两个原因:
你不知道 long long 有多长(哈哈!),所以如果代码假定它正好是 64 位,那么可能会有问题。
如果你使用旧的 C 编译器,它可能不支持 long long。
【讨论】:
long long 也不能是 64 位的,整点没有实际意义
我同意 Thomas Padron-McCarth 的观点。最好分别检查是否存在 int64_t(有符号)或 uint64_t(无符号),如果存在则使用它们。这与导致 size_t 的理智相同。
【讨论】:
它不是便携式的。具体来说,windows 编译器不支持 long long,你必须使用 __int64 和 unsigned __int64 代替(但在非 windows 平台上不一定使用)。
这是不久前的事了,所以也许现在总是有 uint64_t 和 int64_t 可用的机会更大。
【讨论】: