Tipo inexistente

Started by darío, June 26, 2009, 07:33:42 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

darío

Hola,

¿Es normal que una variable, declarada como de un tipo que no se a definido, no de problemas al compilar?

Ejemplo:

global
tSinDefinir var;
end
begin
end

compila sin problemas.

No se si está así a propósito pero me ha producido bastantes molestias para encontrar un bug en mi código ya que resulta que tenía un tipo definido por el usuario al que le cambié el nombre, pero seguía teniendo una variable declarada con el antiguo nombre.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

Eso se debe a que las variables con tipo sin definir se consideran variables tipo proceso...
Quizas seria bueno hacer un procesamiento adicional y chequear aquellas variables cuyos tipos no hayan sido definidos.
Supongo que no es algo complicado.
Me extraña que te haya funcionado, porque supongo que los miembros de ese tipo no existen en los procesos, entonces deberia fallar... si me podes pasar el codigo seria de gran utilidad.
Quizas hay mas de 1 bug.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

Voy a explicar el tema de por qué me funcionaba y se me producía un error que era difícil de localizar, pero de todos modos el error desapareció lógicamente en cuanto cambié el nombre.

Tengo un tipo, llamémoles t, que tiene un campo int pointer

type t
...
int pointer frames;
...
end


También tengo un array global:

tipo miArray[6];


He puesto "tipo" en lugar "t", análogo a la situación que tenía en mi programa.

Y una función:

function funcion(..., t pointer dest)


En la que lo más importante es que se reserva una determinada memoria y a cuya dirección se hace apuntar el puntero "frames" de dest.

Mediante esta función inicializo los distintos elementos de la variable miArray, que en realidad son de "tipo desconocido", pero como a la función le paso la dirección de memoria de la variable, no se produce ningún error.

En otra parte del programa, tengo un proceso en el que hay una variable privada:

t pointer puntero;


Hago apuntar esta variable a uno de los elementos de "miArray". Entonces, cuando intento acceder al campo frames, es decir [puntero].frames, no se produce error de compilación. Sin embargo en la ejecución se cae el programa (lo cual es lógico).
Lógicamente, en cuanto se cambia:

tipo miArray[6];

por

t miArray[6];

el problema deja de existir. Pero me costó algo de localizar y hubiese sido muy fácil si existiese ese checkeo que comentas, ya que no hubiera llegado ni a compilar.

Espero que se haya entendido.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

se entendio perfecto, gracias.

Anotado para ver como podemos mejorar el sistema.

Gracias.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2