无法在 GCC 中定义 IntType 的 MAX 值

Cannot define MAX value for IntType in GCC

本文关键字:IntType MAX 定义 GCC      更新时间:2023-10-16

为什么这在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;
}

long long是非标准的,所以LONG_LONG_MAX是非标准的。

最好使用C++机制numeric_limits< long long >::max(),这是<limits>

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

编辑:您可以使用以下方法实现与编译时常量相同的目标

( ( 1ULL << numeric_limits< long long >::digits ) - 1 )

既然这是C++为什么不使用std::numeric_liimts呢?

#include <limits>
#include <iostream>
int main() {
   std::cout << std::numeric_limits<int>::max() << std::endl;
}

尝试LLONG_MAX:它和长一样非标准,但它是编译时