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

Re: Problemas e Crítica



>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