使用C++;11 我试图把我的办公室代码从C++移植到C++ 11,我们大量使用STLPONT。 有一个编译器宏()-ysSTLpLangLyLon,它在我们的代码中使用,在C++中工作得很好。 但是,在C++ 11中,这是没有定义的。p> #if defined (_STLP_LONG_LONG) // Doesn't come here

使用C++;11 我试图把我的办公室代码从C++移植到C++ 11,我们大量使用STLPONT。 有一个编译器宏()-ysSTLpLangLyLon,它在我们的代码中使用,在C++中工作得很好。 但是,在C++ 11中,这是没有定义的。p> #if defined (_STLP_LONG_LONG) // Doesn't come here,c++,c++11,stlport,C++,C++11,Stlport,我怎样才能解决这个问题?我试着在互联网上搜索,但资源非常有限 编辑:这是代码 # if defined (_STLP_MSVC) || defined (__BORLANDC__) || defined (__ICL) # define ULL(x) x##Ui64 typedef unsigned _STLP_LONG_LONG uint64; # elif defined (_STLP_LONG_LONG) /// <---- Here typedef unsigned _STLP_L

我怎样才能解决这个问题?我试着在互联网上搜索,但资源非常有限

编辑:这是代码

# if defined (_STLP_MSVC) || defined (__BORLANDC__) || defined (__ICL)
# define ULL(x) x##Ui64
typedef unsigned _STLP_LONG_LONG uint64;
# elif defined (_STLP_LONG_LONG) /// <---- Here
typedef unsigned _STLP_LONG_LONG uint64;
# define ULL(x) x##ULL
# elif defined(__MRC__) || defined(__SC__)              //*TY 02/25/2000 - added support for MPW compilers
# include "uint64.h"            //*TY 03/25/2000 - added 64bit math type definition
# else
#  error "there should be some long long type on the system!"
#  define NUMERIC_NO_64 1
# endif
#如果已定义(_STLP_MSVC)|已定义(u BORLANDC_uuuuuuuuuu)|已定义(uu ICL)
#定义ULL(x)x##Ui64
typedef unsigned_STLP_LONG_LONG uint64;

#elif defined(_STLP_LONG_LONG)//看来STLPorts不支持C++11

如果您的代码需要C++11,那么您根本不需要使用
\u STLP\u LONG\u LONG
,因为
LONG-LONG
是标准的

<>如果你的代码也需要在老的C++中工作,那么你可以定义自己的宏,C++可以像预期的那样工作:

#if __cplusplus >= 201103L
    #define MY_LONG_LONG long long
#elif defined(_STLP_LONG_LONG)
    #define MY_LONG_LONG _STLP_LONG_LONG
#endif
当然,如果您的代码必须在C++11之前的标准中工作,那么您可能还需要处理编译器不提供
long
-语言扩展的情况,即使用
\ifdef MY_long\u long
检查您是否可以使用它


编辑:对于您的定义,如果您需要64位宽的类型,您可能应该使用
std::int64_t
而不是
long-long
,因为
long-long
从技术上讲可以宽于64位。

STLPorts似乎不支持C++11

如果您的代码需要C++11,那么您根本不需要使用
\u STLP\u LONG\u LONG
,因为
LONG-LONG
是标准的

<>如果你的代码也需要在老的C++中工作,那么你可以定义自己的宏,C++可以像预期的那样工作:

#if __cplusplus >= 201103L
    #define MY_LONG_LONG long long
#elif defined(_STLP_LONG_LONG)
    #define MY_LONG_LONG _STLP_LONG_LONG
#endif
当然,如果您的代码必须在C++11之前的标准中工作,那么您可能还需要处理编译器不提供
long
-语言扩展的情况,即使用
\ifdef MY_long\u long
检查您是否可以使用它


<>编辑:对于您的定义,如果您需要一个64位宽的类型,则应该使用<代码> STD:In64×T< <代码>,而不是<代码>长Lo/<代码>,因为长Lo/Eng>可以在技术上比64位宽。

您现在使用的C++编译器是什么?根据描述,符合C++11的编译器不应具有
long
类型,因此未输入
#ifdef
的代码是正确的。(顺便说一句,
#defined
是一个打字错误,我们需要了解更多关于您担心编译器跳过的代码。)@KenY-N我相信
long
是标准的C++11。@zdan抱歉,缺少咖啡!如果您将所有平台支持迁移到C++ 11,那么您可以使用“<代码> Type无符号长long UIT64”/CODE替换编辑中的代码,因为它现在是语言的一部分。为什么会被否决?您现在使用的C++编译器是什么?根据描述,符合C++11的编译器不应具有
long
类型,因此未输入
#ifdef
的代码是正确的。(顺便说一句,
#defined
是一个打字错误,我们需要了解更多关于您担心编译器跳过的代码。)@KenY-N我相信
long
是标准的C++11。@zdan抱歉,缺少咖啡!如果您要将所有平台支持迁移到C++11,您可以随意使用
typedef unsigned long-long uint64
替换编辑中的代码,因为它现在是语言的一部分。为什么会被否决呢?
#elifdef
应该是
#elifdefined
#elifdef
应该是
#elifdefined
,我想。