long long int
它似乎在C中有效,但这在c ++中是否有效?
答案 0 :(得分:5)
数据类型long long int
仅在C99和C ++ 0x语言标准中有效,在C90或C ++ 03中无效。一些编译器(如GCC)允许它在那些早期语言版本中用作扩展 - 在编译为C90时。如果同时指定-Wlong-long
和-pedantic
选项,GCC将对其使用情况发出警告。
答案 1 :(得分:1)
它在C ++ 0x标准中。这回答了您的问题:http://en.wikipedia.org/wiki/Long_integer
答案 2 :(得分:0)
请记住,与C和C ++中的所有其他原始类型一样,只有基元可能包含的值的范围是明确定义的;基元的实际大小(以位为单位)由实现决定。我没有太多使用long long int
的经验,因为我更喜欢使用stdint.h
标题中定义的类型。如果您需要确保原语是例如64位长,您可能需要考虑使用uint64_t
或int64_t
。
答案 3 :(得分:0)
它在C ++中不可移植。程序中通常执行的操作是使用单个.h文件,根据编译器/ hw定义所需的所有数字类型。例如,您可能会找到类似
的代码#if defined(__THISCOMPILER__)
typedef long long int64;
typedef unsigned long long uint64;
typedef short int16;
typedef unsigned short uint16;
...
#elseif defined(__THATCOMPILER__)
typedef __int64 int64;
...
#endif
然后在代码的其余部分中,仅使用类似int64
的类型而不是特定的编译器相关声明来保持大部分源可移植。
C99为特定大小(或最小保证大小)的类型定义了标准名称,但并非每个编译器都完全符合C99,因此这种typedef包含仍然很常见。另请注意,currrent标准C ++不包括C99。