[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Problemas e Crítica
- Subject: Re: Problemas e Crítica
- From: "Rubens Altimari" <rubens@bcc2000.net>
- Date: Thu, 3 May 2001 22:08:41 -0300
>O seu exemplo não se aplica a um compilador que siga fielmente as normas da
linguagem C
Ah, se aplica, sim!
>Por exemplo, no meu ep1 de 110 que tinha que fazer um grafo, dava um
problema em um if(a[i - 1] = 'a' || i < 0) dava segmentation por que
O compilador no Linux estava correto, e qualquer (boa) implementação no
Windows também deveria acusar o erro - as regras são claras, neste caso:
como se trata de um "or", ele avalia da esquerda para a direita, parando na
primeira expressão que resulte "true" (afinal, não é preciso prosseguir). A
ordem aqui é crucial - se estivesse ao contrário funcionaria direitinho.
Aliás, ainda bem! É preciso poder contar com isso. Se eu faço, por
exemplo,
if (A && B && C)
eu quero ter *certeza* de que C só vai ser evaluada se A e B forem ambas
verdadeiras. Em C e C++, das duas uma: ou se conhece as regras com exatidão,
ou é melhor adotar uma programação mais defensiva...
Sinceramente, não acredito que compiladores do gabarito do gcc, g++ *ou*
gpp tenham defeitos básicos. Provavelmente, algum uso não muito seguro ou um
caso especial provoca estes erros "estranhos". Dá para contar nos dedos (de
uma mão só) as vezes em que aparecem erros de verdade em compiladores
profissionais (tirando aqueles mais esotéricos, claro)...
Rubens