即使使用-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
编译清除(无警告)。
我看到两个问题:
round()
在ISO符合模式下不应该对C ++可用(因为它来自C99)round()
在这种情况下可用,也只能来自std
命名空间我错了吗?
答案 0 :(得分:2)
This is a bug。它出现了很长一段时间。显然,没有足够的集体愿望来修复它。随着新版本的C ++即将采用math.h中的C99函数,它似乎不太可能被修复。
答案 1 :(得分:0)
我可能不在这里,但gcc的-ansi标志不适用于代码结构(即禁用GCC 语言扩展),而不是将所有库都切换到严格的ANSI兼容模式?
答案 2 :(得分:-1)
我认为标准规定了需要定义的符号以及定义它们的标题。我不相信标准规定不能定义其他符号。更重要的是,std::round()
不会被称为round()
的免费符号定义。