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

Re: Problemas e Crítica



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