无法在GCC中为IntType定义MAX值

时间:2011-04-03 11:58:12

标签: c++ gcc

为什么这在GCC 4.5.1中不起作用

#include <iostream>  
#include <type_traits>
#include <limits.h>//for INT_MIN
#include <typeinfo>
using namespace std;

#ifdef _MSC_VER
#define UNIVERSAL_INT_MAX LLONG_MAX
#define UNIVERSAL_INT_MIN LLONG_MIN
#endif

#ifdef __GNUC__
#define UNIVERSAL_INT_MAX LONG_LONG_MAX  
#define UNIVERSAL_INT_MIN LONG_LONG_MIN
#endif
using namespace std;

int main()
{
    cout << UNIVERSAL_INT_MAX << '\n';
    return 0;
}

我得到的错误:

"main.cpp|24|error: 'LONG_LONG_MAX' was not declared in this scope"  

编辑

#ifdef __GNUC__
#define UNIVERSAL_INT_MAX ( ( 1ULL << numeric_limits< long long >::digits ) - 1 )
#define UNIVERSAL_INT_MAX_plus_three (UNIVERSAL_INT_MAX + 3)
#endif
using namespace std;

int main()
{
    cout << UNIVERSAL_INT_MAX << '\n';
    cout << "Huhh?: " << UNIVERSAL_INT_MAX_plus_three << '\n';
    return 0;
}

3 个答案:

答案 0 :(得分:6)

long long是非标准的,因此LONG_LONG_MAX是非标准的。

最好使用numeric_limits< long long >::max()中的C ++机制<limits>

long long仍然是非标准的,但如果编译器实现它,则保证可以正常工作。

编辑:您可以使用

实现与编译时常量相同的功能
( ( 1ULL << numeric_limits< long long >::digits ) - 1 )

答案 1 :(得分:3)

因为这是C ++,为什么不使用std :: numeric_liimts?

#include <limits>
#include <iostream>

int main() {
   std::cout << std::numeric_limits<int>::max() << std::endl;
}

答案 2 :(得分:2)

尝试LLONG_MAX:它的长度非标准,但它是编译时间