[COMPILADOR]:Comprobación entre variable global y parametro de una funcion

Started by warrior_rockk, September 15, 2014, 01:41:25 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

warrior_rockk

Me despisté y creé una variable global con el mismo nombre que el parámetro de una función que tenía creada con resultados catastróficos hasta que me di cuenta.
¿No debería el compilador comprobar la duplicidad de las globales con los parámetros de una función?


Saludos,

SplinterGU

hola, no, porque es perfectamente valido tener de nombre una variable parametro como nombre de una global... lo que prevalece ahi es el ambito... el ambito mas chico se aisla del mas amplio, por decirlo de alguna manera... y la global deja de ser visible para la funcion y el parametro es el que prevalece para esa funcion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

¿Esto es realmente así? :|


Creo recordar haber tenido problemas compilando con variables privadas que tenían el mismo nombre que variables globales.

warrior_rockk

De hecho da problemas porque la variable global toma el valor del valor del parámetro de función con el mismo nombre.

SplinterGU

Quote from: warrior_rockk on September 15, 2014, 03:06:24 PM
De hecho da problemas porque la variable global toma el valor del valor del parámetro de función con el mismo nombre.

es correcto lo que dices, eso es un bug...


import "mod_say";

global
string lala = "global";
end

process param_lala(lala)
begin
    say("param   :"+lala);
end

process global_lala()
begin
    say("global  :"+lala);
end

process private_lala()
private
    string lala = "private";
begin
    say("private :"+lala);
end

process local_lala()
local
    string lala = "local";
begin
    say("local   :"+lala);
end

process local2_lala()
local
    string lala;
begin
    lala = "local2";
    say("local2  :"+lala);
end


process main()
begin
    say ("main    :" + lala);
    param_lala("param");
    say ("main    :" + lala);
    private_lala();
    say ("main    :" + lala);
    global_lala();
    say ("main    :" + lala);
    local_lala();
    say ("main    :" + lala);
    local2_lala();
    say ("main    :" + lala);
end


hay un bug... cuando es parametro afecta la global... en los demas casos se comporta bien... pero un parametro es una privada/local/publica de una funcion/proceso... no puede ser una global...

lo fixeare en bennugd2... por el momento evita usar parametros que se llamen igual a una global.

gracias.

Quote from: PiXeL on September 15, 2014, 02:47:36 PM
¿Esto es realmente así? :|


Creo recordar haber tenido problemas compilando con variables privadas que tenían el mismo nombre que variables globales.

privadas no puede ser... es muy raro... pero si con parametros.... mira el ejemplo...

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


SplinterGU

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