Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   quien me aclara este error (https://www.clubdelphi.com/foros/showthread.php?t=4961)

Legolas 03-11-2003 23:22:58

quien me aclara este error
 
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.
Código:

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:
Código:

if a=(b and c) then
Obviamente no es lo mismo que
Código:

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:

Código:

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:

Cita:

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


La franja horaria es GMT +2. Ahora son las 06:28:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi