整数常量long long int?

时间:2011-06-02 06:18:59

标签: c++ c types

long long int

它似乎在C中有效,但这在c ++中是否有效?

4 个答案:

答案 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_tint64_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。

相关问题