[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: Peter Kreslins Junior <pkj@linux.ime.usp.br>
- Date: Thu, 03 May 2001 22:50:02 -0300
Perfeito,
Acho que me expressei mal... Quando disse "O seu exemplo não se aplica a um
compilador que siga fielmente as normas da linguagem C", na verdade pensei num
momento onde o compilador cometesse o erro de não efetuar a operação de
comparação na ordem correta... Assim, o exemplo do Marcio estaria correto.
Porém, o meu erro foi pensar em uma implementação um tanto inviável, ou seja, um
compilador totalmente estúpido. Assim, compreendi agora sua posição Rubens,
assim, concordo com o que você disse... Pode ser que no Windows, o fato de se
pedir um subscript negativo até um certo ponto não cause tantos problemas e no
Linux isso ocorra mesmo para subscripts negativos e pequenos... Entendo que
pedir um a[-4] é perfeitamente correto, lógico, podemos fazer coisas
"estranhíssimas" com isso... Mas, como já disse, meu argumento não era contra a
validade de se fazer tal expressão, mas sim quanto à ordem em que se faz.
E é claro, a lógica do programa estava errada... Quanto a isso não temos
dúvida...
Rubens Altimari wrote:
> >O seu exemplo não se aplica a um compilador que siga fielmente as normas da
> linguagem C
>
> Revisando meu comentário: o compilador Windows não estava "errado"! É
> perfeitamente legal fazer a[-4]! As regras de subscripting também são
> claras: em C, e1[e2] é _precisamente_ equivalente a *((e1)+(e2)). Por
> exemplo:
>
> char buffer[100], *bufferpointer, c;
>
> bufferpointer = &buffer[6];
>
> c = bufferpointer[-4]; /* = buffer[2] */
>
> Ou seja, o problema não era nem dos compiladores (Linux e Windows) nem
> dos sistemas operacionais: sintaticamente estava tudo correto, mas havia um
> problema de lógica, a ordem dos argumentos deveria estar ao contrário. O que
> houve, então, foi "circunstancial": o fato de estar errado não significa que
> vá dar pau sempre. Se dá pau ou não depende tanto de "sorte" (no sentido de
> acaso) como de como o SO funciona. Eu posso invadir uma área reservada e não
> dar pau. Mesmo estando errado, claro.
>
> Ter dado pau no Linux e não no Windows, portanto, não quer dizer nada,
> neste caso, o programa estava errado de todo jeito!
>
> Rubens