C'è una buona ragione per cui questo programma viene compilato in GCC anche con i flag -ansi
e -pedantic
?Perché GCC consente l'uso di round() in C++ anche con i flag ansi e pedantic?
#include <cmath>
int main (int argc, char *argv [])
{
double x = 0.5;
return static_cast<int>(round(x));
}
Questo compila pulite (nessun avviso, anche) con g++ -ansi -pedantic -Wall test.cpp -o test
.
vedo due problemi:
round()
non dovrebbe essere a disposizione di C++ in modalità ISO-conforme (in quanto proviene da C99)- Anche se
round()
erano disponibili, in questo caso, solo dovrebbe essere così dal namespacestd
Mi sbaglio?
la pagina man di gcc indica che alcune funzioni non saranno definite quando viene impostato il flag ansi, ma non solo le funzioni ansi verranno definite – josefx
@josefx: vedere i miei commenti a D. Shawley. Dopo aver studiato di più, ho appreso che le estensioni della libreria non possono "alterare il comportamento di programmi ben formati". Quindi mi sembra che aggiungere un'estensione 'round()' alla libreria sia illegale, il che rende il comportamento del moot della bandiera '-ansi'. –