C++ g+的LLONG_MAX缺失+;4.9.4?

C++ g+的LLONG_MAX缺失+;4.9.4?,c++,c++11,g++,C++,C++11,G++,我试图调试这个简单的代码: #include "limits.h" int main() { long long a = LLONG_MAX; return 0; } 如果我像你一样运行它 g++ test.cpp 我明白了 我检查了这个常数的参考值,它说: LLONG_MIN、LLONG_MAX和ULLONG_MAX是为库定义的 符合1999年或更高版本的C标准(仅包括 2011以来的C++标准:C++ 11) 所以我试着设置-std=c++11,但没有帮助。有什么建议吗 同样

我试图调试这个简单的代码:

#include "limits.h"

int main()
{
  long long a = LLONG_MAX;

  return 0;
}
如果我像你一样运行它

g++ test.cpp
我明白了

我检查了这个常数的参考值,它说:

LLONG_MIN
LLONG_MAX
ULLONG_MAX
是为库定义的 符合1999年或更高版本的C标准(仅包括 2011以来的C++标准:C++ 11) 所以我试着设置
-std=c++11
,但没有帮助。有什么建议吗

同样的代码在其他使用g++5.4.0的机器上也能很好地编译

更新:LangyMax是可见的(但LangLyMax不是),C++是DEBAN44/P>< P> >,你应该使用

#包括
...
标准::数值限制().max();

如果您想使用c定义,请使用
#include

Debian 4非常旧,附带的glibc版本不支持C99。即使您安装了更新的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
选项)

也尝试使用“适当”C++函数,如TPR所建议的。如果

std::numeric\u limits
起作用,则使用它


如果这些都不起作用,那么你实际上只有两个选择。找到一种升级glibc而不阻塞系统的方法,或者升级到较新的Debian版本。

my bad,它的.cpp文件不是.cIs是否可能安装了多个编译器?你能用
g++--version
验证一下你是否真的在使用4.9.4吗?包含文件应该是
,而不是
“limits.h”
--或者更好的是,
。这不太可能是问题的原因(除非您在某处有另一个
limits.h
标题)。
INT_MAX
LONG_MAX
是否可见?g++--版本报告g++(GCC)4.9.4和LONG_MAX是否可见,但LLONG_MAX不可见这些是解决方法;他们没有回答这个问题。@PeteBecker是真的,但这可能是OP能做的唯一可行的事情,如果它能工作的话(我不知道,它可能取决于引擎盖下的glibc)。这是正确的答案:它更像是一个
glibc
问题,而不是一个GCC版本问题。我试着启用gnu++11,但没有成功,但是更令人惊讶的是/usr/include/limits.h已经定义了LLONG_MAX 9223372036854775807LL,我用g++-M检查过了,这个文件确实被包含了,但是我认为手动定义那些带有-D like uuuuu GNUC_uuuuu或其他内容的东西可能会搞乱很多其他东西things@ZhaniBaramidze如果无法使用
std::numeric_limits
,然后尝试将受影响的代码移动到
.c
文件中,改为使用
gcc-std=gnu99
进行编译。您可以将C文件与C++文件在同一个项目中结合而不出现问题。只需确保C++代码头声明(C<代码> .H/COD>文件)在代码>外部“C”{ } /Cuth>块中,如在这个问题中所示:这样你就可以从C++代码中调用C函数。但他们必须编写函数才能手动获取最大值?
g++ -std=gnu++11 test.cpp
grep -r LLONG_MAX /usr/include