我试图调试这个简单的代码:
#include "limits.h"
int main()
{
long long a = LLONG_MAX;
return 0;
}
如果我像
那样运行它g++ test.cpp
我得到了
test.cpp: In function ‘main’:
test.cpp:5:17: error: ‘LLONG_MAX’ undeclared (first use in this function)
long long a = LLONG_MAX;
我检查了这个常量的引用,它说:
为库定义了
LLONG_MIN
,LLONG_MAX
和ULLONG_MAX
符合1999年或以后的C标准(仅包括 自2011年以来的C ++标准:C ++ 11)。
所以我尝试设置-std=c++11
,但没有帮助。有什么建议吗?
P.S使用g ++ 5.4.0在其他机器上编译相同的代码
更新:LONG_MAX可见(但LLONG_MAX不是),机器是debian4
答案 0 :(得分:4)
Debian 4非常陈旧,并附带一个不能正确支持C99的glibc版本。即使您安装了较新的GCC版本,您仍然需要安装更新的glibc版本。这在Debian 4上可能是不可能的。
glibc是Debian和大多数其他Linux发行版上的标准C库实现。
如果你想使用更现代的C功能,你应该使用更现代的Debian版本。
您仍然可以在编译时尝试启用GNU扩展,希望您正在处理的glibc版本在GNU模式下公开更多C99功能:
g++ -std=gnu++11 test.cpp
同时在系统标题中搜索LLONG_MAX
:
grep -r LLONG_MAX /usr/include
如果这是空的,那么你无能为力。如果找到了某些内容,那么请尝试查看哪个宏LLONG_MAX受到保护,以及是否需要在编译器标志中定义该宏(使用-D
选项)。
也尝试使用"适当的"正如tpr在他/她的回答中所建议的那样,C ++为此起作用。如果std::numeric_limits
有效,请使用它。
如果这些都不起作用,那么你真的只有两个选择。找到一种方法来升级glibc而不需要对系统进行整理,或者升级到更新的Debian版本。
答案 1 :(得分:2)
在C ++中,您应该使用std::numeric_limits
#include <limits>
...
std::numeric_limits<long long>().max();
如果您想要c定义,请使用#include <climits>