是否有很长的定义?

时间:2010-05-14 19:07:04

标签: c++

在哪里检查是否定义了long long类型?我想做这样的事情:

#ifdef LONGLONG
#define long_long long long
#else 
#define long_long long
#endif

2 个答案:

答案 0 :(得分:7)

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但不能定义{{} 1}}。

如果您需要具有特定大小的整数类型,则应使用LLONG_MAX(如果您的实现支持它)。如果您的实施不支持,Boost has an implementation of it

答案 1 :(得分:2)

我不会担心是否定义了具有该名称的类型,而是#include <climits>并检查您是否可以找到足够大的整数类型以满足您的预期用途。 (尽管您可以检查是否定义LLONG_MAX以确定是否存在long long。)

修改:或者,如果您可以假设C99标题和类型可用,#include <cstdint.h>并使用例如int64_t获取64位类型或int_fast64_t以获得“快速”64位类型(通过某些特定于编译器的快速定义)。如果您想要最大的可用类型,请intmax_t