PDA

Ver la Versión Completa : quien me aclara este error


Legolas
03-11-2003, 23:22:58
He comenzado a utilizar delphi 7 hace unos días, y la verdad, me ha dejado muy sorprendido un error, que no se por que ocurre, el error es el siguiente:


if a=b and b<>c and c>=d and d<=a then
..............................................;


esta linea de codigo, que hasta ahora siempre la he utilizado en pascal, por ejemplo, me genera el error de tipos incompatibles, y ya estoy harto, porque no se porque me da el error, alguien me lo podría explicar, por favor.:mad:

delphi.com.ar
03-11-2003, 23:31:19
La solución rápida es poner entre paréntesis las comparaciones.f (a=b) and (b<>c) and (c>=d) and (d<=a) then
Si no pones paréntesis, el compilador no puede saber si el AND esta siendo usado para enmascarar los bits de alguna variable. Esto es una sentencia válida:
if a=(b and c) then
Obviamente no es lo mismo que
if (a=b) and c then siendo c una variable del tipo boolean.

Saludos!

roman
04-11-2003, 00:00:51
Y de hecho, esto tiene que ver con la precedencia de los operadores. Hasta donde recuerdo, la expresión equivalente en C:


if (a==b && b!=c && c>=d && d<=a)
{
}


sí hace lo que uno supondría. Más aun, la ayuda de Delphi tiene el siguiente texto:


Parentheses are sometimes needed in situations where, at first glance, they seem not to be. For example, consider the expression

X = Y or X = Z

The intended interpretation of this is obviously

(X = Y) or (X = Z)

Without parentheses, however, the compiler follows operator precedence rules and reads it as

(X = (Y or X)) = Z

which results in a compilation error unless Z is Boolean.


Siempre me ha llamado la atención que si Borland mismo admite que la interpretación obvia es

(X = Y) or (X = Z)

por qué $%&·"@# escogió otra precedencia para los operadores.

// Saludos

pd: El enojo es porque a mi siempre me pasa los mismo que a Legolas

:D