PDA

Ver la Versión Completa : El cero tiene muchas caras


roman
02-10-2003, 17:31:31
Acabo de ver esto en los grupos de noticias de borland.

¿Algún gurú me podría explicar por qué la siguiente sentencia no sólo no incomoda al compilador sino que además da el resultado correcto?


var
Cero: Integer;

begin
Cero := SizeOf(while 1 = 1 do begin end);
end;


:eek:

// Saludos

hecjona
02-10-2003, 22:56:14
No soy guru pero, tengo una opinion al respecto

si vez la ayuda veras:

function SizeOf(X): Integer;


X no tiene tipo nisiquiera variant;

Si buscas la declaracion o el cuerpo de la funcion no la vaz a encontrar aunque la ayuda te diga que esta en system..


Creo que Sizeof es una funcion de tipo interna (tipo macro en c++) que esta diseñada para muchas cosas de las que no se da informacion

Da lo mismo con:

SizeOf(if j=0 then j:=j+1);
sizeof(repeat j:= j+1; until j = 10);

siempre te devuelve 0, creo que es poque puede evaluar una sentencia de control y el resultado en Bytes es 0;

__cadetill
03-10-2003, 01:47:43
deacuerdo con lo que dices, pero entre los bucles que tu pones y el que propone el amigo Román hay una sutil diferencia. Los tuyos son finitos y el de Román no :confused:

roman
03-10-2003, 02:42:06
No deja de ser curioso. "Funciona" con los ciclos que muestra hecjona y también, por ejemplo con

SizeOf(try except end)

Ciertamente que SizeOf no es realmente una función sino una de esas cosas "mágicas" del compilador que "simplemente" sustituye la instrucción por el tamaño de la variable o tipo de datos que puede determinarse al momento de la compilación por la declaración de la variable o tipo.

Lo curioso es pensar en cómo el compilador efectúa este proceso de manera que en la lista de símbolos que va leyendo conforme pasa sobre el código fuente trata por igual una variable, tipo o sentencia de control.

Aunqué veo muy difícil que algún programa falle por un hecho así (¿quién, por equivocación, escribiría algo así?) se trata de un error, o por lo menos una omisión en el compilador.

En fin, siempre hay algo nuevo bajo el sol :)

// Saludos