c++ - 为什么 GCC 允许在 C++ 中使用 round() 即使带有 ansi 和 pedantic 标志?

标签 c++ gcc rounding c++98

即使使用 -ansi-pedantic 标志,这个程序在 GCC 下编译是否有充分的理由?

#include <cmath>

int main (int argc, char *argv [])
{
     double x = 0.5;

     return static_cast<int>(round(x));
}

使用 g++ -ansi -pedantic -Wall test.cpp -o test 编译干净(甚至没有警告)。

我看到两个问题:

  1. round() 不应该在符合 ISO 的模式下对 C++ 可用(因为它来自 C99)
  2. 即使 round() 在这种情况下可用,它也只能在 std 命名空间中可用

我错了吗?

最佳答案

This is a bug .它已经存在了很长时间了。显然,没有足够的集体愿望来修复它。随着新版本的 C++ 即将推出,它将采用 math.h 中的 C99 函数,它似乎不太可能得到修复。

关于c++ - 为什么 GCC 允许在 C++ 中使用 round() 即使带有 ansi 和 pedantic 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882689/

相关文章:

c++ - 不直观的嵌套类继承

c# - Math.Round 返回奇数向上舍入但偶数向下舍入

c# - 如何将 double 舍入到预定义列表中最接近的最高值?

c++ - SDL 2.0 我可以不在主线程中运行它吗?

java - 内部调用另一个 dll 的 JNI DLL 的依赖项

c++ - 如何在主渲染循环运行时将纹理同步加载到 GPU

c - C89 中的 {0} 初始值设定项的标准如何?

ubuntu - 通过 MAKE 将参数传递给编译器

c# - 在 C# 中匹配 FORTRAN 舍入

c++ - boost::signal 库不工作