在哪里检查是否定义了long long类型?我想做这样的事情:
#ifdef LONGLONG
#define long_long long long
#else
#define long_long long
#endif
答案 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
。