Warum GCC Verwendung von runden () in C ++ ermöglicht auch mit der ansi und pedantisch Flaggen?

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

  •  19-09-2019
  •  | 
  •  

Frage

Sie haben einen guten Grund, warum dieses Programm unter GCC kompiliert auch mit den -ansi und -pedantic Flaggen?

#include <cmath>

int main (int argc, char *argv [])
{
     double x = 0.5;

     return static_cast<int>(round(x));
}

Dies kompiliert sauber (keine Warnungen, auch) mit g++ -ansi -pedantic -Wall test.cpp -o test.

Ich sehe zwei Probleme:

  1. round() sollte nicht vorhanden C ++ in ISO-konformem Modus (da es von C99 kommt)
  2. Auch wenn round() in diesem Fall vorhanden war, soll es nur so aus dem std Namespace

Bin ich falsch?

War es hilfreich?

Lösung

Dies ist ein Fehler . Es ist schon eine erstaunlich lange Zeit. Anscheinend hat es nicht genug von einem kollektiven Wunsch, es zu beheben. Mit einer neuen Version von C ++ gleich um die Ecke, die die C99-Funktionen aus math.h annehmen wird, scheint es unwahrscheinlich, dass es jemals festgelegt werden.

Andere Tipps

ich hier weg Basis sein könnte, aber nicht die gcc -ansi Flag auf den Code-Konstrukte gelten (dh deaktivieren GCC Sprache Erweiterungen), anstatt alle Bibliotheken in strengen ANSI-kompatiblen Modus als auch zu wechseln?

Ich glaube, dass die Standards festlegen, welche Symbole erforderlich sind, definiert werden und in dem Kopf sie definiert sind. Ich glaube nicht, dass die Standards fest, dass keine andere Symbole definiert werden können. Mehr zu dem Punkt, std::round() wird nicht durch ein freies Symbol namens round() definiert werden kann, definiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top