代码之家  ›  专栏  ›  技术社区  ›  Dan Moulding

为什么GCC允许在C++中使用圆(),甚至使用ANSI和迂回标记?

  •  6
  • Dan Moulding  · 技术社区  · 16 年前

    这个程序在gcc下编译的原因有充分的理由吗? -ansi 和 -pedantic 旗帜?

    #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. 即使 循环() 在这种情况下,它应该只能从 std 命名空间

    我错了吗?

    3 回复  |  直到 11 年前
        1
  •  2
  •   Dan Moulding    16 年前

    This is a bug . 它已经存在了很长时间了。显然,没有足够的集体意愿来修复它。随着一个新的C++版本即将到来,它将采用C99函数从数学H。

        2
  •  0
  •   Timo Geusch    16 年前

    我可能在这里不在基础上,但gcc的-ansi标志不适用于代码构造(即,禁用gcc 语言 扩展名)而不是将所有库切换到严格的符合ANSI的模式?

        3
  •  -1
  •   D.Shawley    16 年前

    我相信这些标准规定了需要定义什么符号以及在哪个标题中定义它们。我不认为该标准规定了不得定义其他符号。更重要的是, std::round() 不会由一个名为 round() 可以定义。