为什么可能会使用;“隆隆”;在C或C+中+;这是件坏事吗? 为什么在C或C++中使用“长长”是坏事?

为什么可能会使用;“隆隆”;在C或C+中+;这是件坏事吗? 为什么在C或C++中使用“长长”是坏事?,c++,c,gcc,C++,C,Gcc,前几天我编译了一个运行库,在代码中它检查long是否为64位,如果不是,则使用long-long。但与此同时,它发出了“使用long-long”的警告。我想不出“long long”是警告的任何理由,除非它是开发人员遗留下来的调试错误 谢谢 Chenz有两个原因: 你不知道长有多长(哈哈!)长有多长,所以如果代码假设它正好是64位,那么可能会有问题 如果使用旧的C编译器,它可能不支持long-long。我同意Thomas Padron McCarth的观点。最好分别检查int64_t(有符号)或

前几天我编译了一个运行库,在代码中它检查long是否为64位,如果不是,则使用long-long。但与此同时,它发出了“使用long-long”的警告。我想不出“long long”是警告的任何理由,除非它是开发人员遗留下来的调试错误

谢谢 Chenz有两个原因:

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


如果使用旧的C编译器,它可能不支持long-long。

我同意Thomas Padron McCarth的观点。最好分别检查int64_t(有符号)或uint64_t(无符号)是否存在,如果存在,则使用它们。就我所知,
long
目前仅在C99中是标准的。它也是C++0x中的一种类型,但大多数现代编译器应该已经支持它了


但是,对于固定大小的整数,可以使用C99报头<代码> <代码>,或者在C++ >代码> <代码> < /P> < P>它不是可移植的。具体来说,windows编译器不支持long-long,您必须使用_int64和unsigned _int64(但在非windows平台上不一定使用)


这是很久以前的事了,所以现在可能有更好的机会始终使用uint64\u t和int64\u t。

我真的看不出您的第一点,因为这与任何其他通用整数类型都没有区别;C99提供精确宽度和特定于域的整数类型有一个原因……记录:精确宽度整数在C99中是可选的。@Christoph:True。另一方面,我不知道有哪种实现的long大于64位,如果long不短的话,它可能正好是64位。@sellibitze:根据C99 7.18.1.1,§3种精确宽度8、16、32,如果此类类型在所讨论的体系结构上可用,则必须提供64;如果不是,
long-long
也不能是64位的,整个要点都没有意义“…如果这些类型可用…”-->一致性实现不必有这些类型-->可选