Por que o GCC permite o uso de Round () em C ++, mesmo com as bandeiras ANSI e Pedantic?
Pergunta
Existe uma boa razão pela qual este programa compila no GCC, mesmo com o -ansi
e -pedantic
bandeiras?
#include <cmath>
int main (int argc, char *argv [])
{
double x = 0.5;
return static_cast<int>(round(x));
}
Isso compila limpo (sem avisos, até) com g++ -ansi -pedantic -Wall test.cpp -o test
.
Eu vejo dois problemas:
round()
Não deve estar disponível para C ++ no modo iso-conforante (pois vem de C99)- Ainda que
round()
estavam disponíveis neste caso, só deveria ser assim dostd
espaço para nome
Estou errado?
Solução
Isso é um bug. Já existe há muito tempo. Aparentemente, não houve um desejo coletivo de consertá -lo. Com uma nova versão do C ++ ao virar da esquina que adotará as funções C99 da Math.H, parece improvável que ele seja corrigido.
Outras dicas
Eu posso estar fora da base aqui, mas a bandeira -Ansi do GCC não se aplica às construções de código (ou seja, desativar o GCC Língua extensões) em vez de alternar todas as bibliotecas no modo rigoroso compatível com ANSI também?
Acredito que os padrões especificam quais símbolos precisam ser definidos e em qual cabeçalho eles são definidos. Não acredito que os padrões afirmem que nenhum outro símbolo pode ser definido. Mais ao ponto, std::round()
não será definido por um símbolo livre chamado round()
pode ser definido.