6

-ansi即使带有and-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命名空间

我错了吗?

4

3 回答 3

2

这是一个错误。它已经存在了很长一段时间。显然,解决它的集体愿望还不够。随着新版本的 C++ 即将到来,它将采用 math.h 中的 C99 函数,它似乎不太可能被修复。

于 2009-12-12T02:37:29.470 回答
0

我可能在这里偏离了基础,但 gcc 的 -ansi 标志是否不适用于代码结构(即禁用 GCC语言扩展),而不是将所有库也切换到严格的 ANSI 兼容模式?

于 2009-12-10T17:44:57.557 回答
-1

我相信标准指定了需要定义哪些符号以及它们在哪个标题中定义。我不相信标准规定不能定义其他符号。更重要的是,std::round()不会被定义的自由符号称为round()可以定义的。

于 2009-12-10T17:47:46.297 回答