Не удается определить значение MAX для IntType в GCC - PullRequest
0 голосов
/ 03 апреля 2011

Почему это не работает в 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 ]

6 голосов
/ 03 апреля 2011

long long нестандартно, поэтому LONG_LONG_MAX нестандартно.

Лучше использовать механизм C ++ numeric_limits< long long >::max(), который находится в <limits>.

long long, все еще нестандартно, но если компилятор его реализует, это гарантированно сработает.

РЕДАКТИРОВАТЬ: Вы можете достичь того же, что и константа времени компиляции, используя

( ( 1ULL << numeric_limits< long long >::digits ) - 1 )
3 голосов
/ 03 апреля 2011

Поскольку это C ++, почему бы не использовать std :: numeric_liimts?

#include <limits>
#include <iostream>

int main() {
   std::cout << std::numeric_limits<int>::max() << std::endl;
}
2 голосов
/ 03 апреля 2011

Попробуйте LLONG_MAX: он нестандартный, как long, но время компиляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...