¿Hay una buena razón por la cual este programa compila bajo GCC incluso con los indicadores -ansi
y -pedantic
?¿Por qué GCC permite el uso de round() en C++ incluso con las banderas ansi y pedantic?
#include <cmath>
int main (int argc, char *argv [])
{
double x = 0.5;
return static_cast<int>(round(x));
}
Esto compila limpias (no hay advertencias, incluso con g++ -ansi -pedantic -Wall test.cpp -o test
).
veo dos problemas:
round()
no debería estar disponible a C++ en el modo ISO-conformes (ya que proviene de C99)- Incluso si
round()
estaban disponibles en este caso, sólo se debe sea tan delstd
namespace
¿Es incorrecto?
la página man para gcc indica que alguna función no se definirá cuando se establezca el indicador ansi, pero no que solo se definan las funciones ansi – josefx
@josefx: vea mis comentarios a D. Shawley. Después de investigar más, descubrí que las extensiones de la biblioteca no pueden "alterar el comportamiento de los programas bien formados". Por lo tanto, me parece que añadir una extensión 'round()' a la biblioteca sería ilegal, lo que hace que el comportamiento del indicador '-ansi' sea discutible. –