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

时间:2009-12-10 17:40:00

标签: 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命名空间
  3. 我错了吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

我认为标准规定了需要定义的符号以及定义它们的标题。我不相信标准规定不能定义其他符号。更重要的是,std::round()不会被称为round()的免费符号定义。