Por que o GCC permite o uso de Round () em C ++, mesmo com as bandeiras ANSI e Pedantic?

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

  •  19-09-2019
  •  | 
  •  

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:

  1. round() Não deve estar disponível para C ++ no modo iso-conforante (pois vem de C99)
  2. Ainda que round() estavam disponíveis neste caso, só deveria ser assim do std espaço para nome

Estou errado?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top