[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Problemas e Crítica



Sim Rubens,

Mas não entendi sua posição... Como disse o Marcio, o problema segundo ele era o
sistema operacional... Eu acho estranho você culpar o sistema operacional, por
um erro, que é, de fato, do compilador... Se a regra em linguagem C é: operações
de comparação são avaliadadas da esquerda para a direita, então,
independentemente do sistema operacional, um compilador digno, seguirá essa
regra. Assim, compiladores como LCC, que tem uma estrutura no mínimo duvidosa,
podem não seguir a especificação à risca, mas daí a dizer que o sistema
operacional possa estar causando esta falha, tem um longo caminho.

Assim, o exemplo do Marcio, usava um conceito de modo errado, na medida em que
acessava um vetor antes de saber se o indice é negativo. Então a discussão
resume-se a determinar o causador de toda a dor de cabeça: ao meu ver o
compilador para Windows que não efetuava as operações de comparação na ordem
correta!

Rubens Altimari wrote:

> >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