为什么在C或C++中使用"long long"会是一件坏事?

Cra*_*enz 4 c c++ gcc

为什么在C或C++中使用"long long"会是一件坏事?

我前几天正在编译一个运行时库,在它检查的代码中查看long是否为64位,如果不是则使用long long.但随之而来的是,它发出了一个#warning"使用long long".除非是开发人员的残留调试,否则我想不出任何"长期"警告的原因.

谢谢Chenz

Unc*_*ens 10

据我所知,long long目前只有C99标准.它也将是C++ 0x中的一种类型,但大多数现代编译器都应该支持它.

但是,对于固定大小的整数,可以使用C99标头<stdint.h>,或者使用C++<boost/cstdint.hpp>


Tho*_*thy 9

两个原因:

你不知道多长时间(哈哈!),所以如果代码假设它正好是64位,那么可能会出现问题.

如果您使用旧的C编译器,它可能不会支持很长时间.


Tim*_*ost 7

我同意Thomas Padron-McCarth的观点.最好分别检查int64_t(signed)或uint64_t(unsigned)是否存在,并在它们存在时使用它们.这是导致size_t的同样的理智.


Pee*_*oot 5

它不便携.具体来说,Windows编译器并不使用支持long long,而是必须使用__int64和unsigned __int64(但不能在非Windows平台上使用).

这是不久前的,所以也许现在总是有更好的机会让uint64_t和int64_t可用.