¿Por qué GCC permitir el uso de ronda () en C ++ incluso con las banderas de ANSI y pedante?

StackOverflow https://stackoverflow.com/questions/1882689

  •  19-09-2019
  •  | 
  •  

Pregunta

¿Hay una buena razón por la cual este programa compila bajo GCC 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 limpios (sin advertencias, incluso) con g++ -ansi -pedantic -Wall test.cpp -o test.

Veo dos problemas:

  1. round() no debe estar disponible para C ++ en el modo ISO-conformant (ya que proviene de C99)
  2. Aunque round() estaban disponibles en este caso, sólo debería ser por lo que desde el espacio de nombres std

¿Me equivoco?

¿Fue útil?

Solución

trata de un error . Ha sido alrededor por un tiempo sorprendentemente largo tiempo. Al parecer, no ha habido suficiente de un deseo colectivo para solucionarlo. Con una nueva versión de C ++ a la vuelta de la esquina que se adopten las funciones de C99 math.h, parece poco probable que alguna vez se fija.

Otros consejos

Puede ser que sea fuera de base aquí, pero sí se aplica la bandera -ansi no de gcc para las construcciones de código (es decir, deshabilitar CCG idioma extensiones) en lugar de cambiar todas las bibliotecas en modo compatible con ANSI estricta así?

Creo que las normas especifican que se requieren símbolos que definirse y en el que la cabecera se definen. No creo que los estándares del Estado que no se pueden definir otros símbolos. Más al punto, std::round() no se define por un símbolo gratuito llamado round() se puede definir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top