为什么这在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;
}
答案 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
:它的长度非标准,但它是编译时间