我试图调试这个简单的代码:
#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
andULLONG_MAX
are defined for libraries complying with the C standard of 1999 or later (which only includes the C++ standard since 2011: C++11).
所以我尝试设置 -std=c++11
但没有帮助。有什么建议吗?
P.S 相同的代码在使用 g++ 5.4.0 的其他机器上编译得很好
更新:LONG_MAX 可见(但 LLONG_MAX 不可见),机器是 debian4
最佳答案
Debian 4 非常旧,并且带有不能正确支持 C99 的 glibc 版本。即使您安装了较新的 GCC 版本,您仍然需要安装较新的 glibc 版本。这在 Debian 4 上可能是不可能的。
glibc 是 Debian 和大多数其他 Linux 发行版上的标准 C 库实现。
如果您想使用更现代的 C 功能,您应该使用更现代的 Debian 版本。
您仍然可以在编译时尝试启用 GNU 扩展,希望您正在处理的 glibc 版本在 GNU 模式下公开更多 C99 功能:
g++ -std=gnu++11 test.cpp
同时在系统 header 中搜索 LLONG_MAX
:
grep -r LLONG_MAX /usr/include
如果结果是空的,你就无能为力了。如果它找到了什么,然后尝试查看 LLONG_MAX 受哪个宏保护,以及您是否需要在编译器标志中定义该宏(使用 -D
选项)。
也尝试为此使用“适当的”C++ 函数,正如 tpr 在他/她的回答中所建议的那样。如果 std::numeric_limits
有效,则使用它。
如果这些都不起作用,那么您实际上只有两个选择。想办法升级 glibc 而不会阻塞系统,或者升级到更新的 Debian 版本。
关于c++ - g++ 4.9.4 缺少 LLONG_MAX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101031/