我正在尝试将我的办公室代码从C++迁移到C++ 11,我们大量使用STLPorts.
有一个编译器宏(http://www.stlport.org/doc/configure.html) - _STLP_LONG_LONG,它在我们的代码中使用,在C++中工作正常.
但是,在C++ 11中,没有定义.
#if defined (_STLP_LONG_LONG)
// Doesn't come here
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?我尝试在互联网上搜索,但资源非常有限.
编辑:这是代码
# 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
Run Code Online (Sandbox Code Playgroud)
据我所知,代码试图找到给定平台的long long类型.对于Linux上的预C++ 11,g ++会转到指向的行.但是当我执行g ++ -std = c ++ 11 ...时,g ++跳过这一行并转到错误"系统上应该有长长的歌曲!"
似乎STLPorts不支持C++ 11.
如果您的代码需要C++ 11,那么您根本不需要使用_STLP_LONG_LONG,因为它long long是标准的.
如果你的代码也需要在旧的C++中工作,那么你可以定义自己的宏,它可以像人们期望的那样使用C++ 11:
#if __cplusplus >= 201103L
#define MY_LONG_LONG long long
#elif defined(_STLP_LONG_LONG)
#define MY_LONG_LONG _STLP_LONG_LONG
#endif
Run Code Online (Sandbox Code Playgroud)
当然,如果您的代码必须使用pre-C++ 11标准,那么您可能还需要处理编译器不提供long long-language扩展的情况,即用于#ifdef MY_LONG_LONG检查是否可以使用它.
编辑:对于您的定义,您应该使用std::int64_t而不是long long如果您需要64位宽的类型,long long技术上可以宽于64位.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |