有long long类型的定义吗?

4

在哪里检查 long long 类型是否已定义?我想要像这样做:

#ifdef LONGLONG
#define long_long long long
#else 
#define long_long long
#endif
2个回答

6

LLONG_MAX 表示 long long 类型所能表示的最大值;如果你的实现不支持 long long,则不应该定义 LLONG_MAX

#include <limits.h>

#ifdef LLONG_MAX
#define long_long long long
#else
#define long_long long
#endif

这并不是一个完美的解决方案。long long在C++03中不是标准,而long long已经存在比C99更长的时间,因此很可能(且有可能)编译器支持long long但未定义LLONG_MAX
如果您想使用特定大小的整数类型,应该使用<stdint.h>(如果您的实现支持)。 如果您的实现不支持它,Boost有一个实现

@James,我的实现支持(提供)stdint.h,我在那里发现了这样的东西:#define _LONGLONG __int64,因此我理解我应该键入_LONGLONG而不是LLONG_MAX,这样就可以了吗?如果您能回答这个问题,我会非常感激。谢谢。 - There is nothing we can do
了解一下:为什么不直接使用 stdint.h 中定义的类型呢?'_LONGLONG' 是由你的实现定义的,不是标准,因此如果你想编写可移植的代码,就不应该使用它。 - James McNellis
@James McNellis 我在(stdint.h)找到了这样的内容:UINT64_MAX,如果我使用它,我想这样就可以了吧? - There is nothing we can do
@Knowing:不是long long,而是uint64_t可以表示的最大值。您想要做什么? - James McNellis
@James 我正在尝试从我的函数中获得最大可能的类型作为结果。 - There is nothing we can do
2
@知道:然后使用在<cstdint>中声明的std::intmax_t。那将是可用的最大有符号整数类型。 - James McNellis

2
不必担心是否已经定义了该名称的类型,只需使用#include <climits> 检查是否可以找到足够大的整数类型以供您使用。(尽管您可以通过检查LLONG_MAX是否被定义来判断long long是否存在。)
编辑:或者,如果您可以假设C99头文件和类型可用,则#include <cstdint.h>并使用例如int64_t来获取64位类型或int_fast64_t来获取“快速” 64位类型(根据某些编译器特定的定义)。 或者使用intmax_t以获取最大可用类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接