c++ - g++ 4.9.4 缺少 LLONG_MAX?

标签 c++ c++11 g++

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

#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 and ULLONG_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/

相关文章:

c++ - 如何创建不区分大小写的正则表达式来匹配文件扩展名?

c++ - 使用 boost::spirit 解析 double 列表

C++0x 指定初始化器

c++ - 如何定义通用模板签名

c++ - 使用调试选项时 dwarfdump 为空

macos - g++ 不适用于 Lion

c++ - 如何使用 Cygwin 在 C++ 中添加外部库

c++ - 在二叉树中向左或向右随机插入

c++ - 创建中间件以使相机兼容 ONVIF

c++ - 为什么我必须明确地转换一个我已经指定了底层类型的枚举?