使用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
,我想。