Estoy decepcionada con el comportamiento de includes: bueno como el compilador los relaciona entre si...
por ejemplo:
Programa juego.prg vincula otros prg...
include "menus.prg";
include "elementos.prg";
juego.prg
contiene esta variable global:
int mis_datos;
Hay un proceso dentro de menus.prg
proces menu_titulo();
y necesita acceder a la variable global mis_datos; del principal juego.prg
Esto al compilar NO ME LO RECONOCE la variable!!! >:(
menus.prg:24: error: Unknown identifier ( error in token: "mis_datos" ).
juego.prg: doesn't exist or isn't version 8 DCB compatible
teóricamente, los ficheros include deberían tener acceso las variables globales,locales y procesos/funciones del principal juego.prg
además, otros includes
por ejemplo:
include "menus.prg";
include "elementos.prg";
elementos.prg pueda tener acceso alguna variable global,local que se declara en menus.prg
resumiendo, deberia ser accesible en ambos sentidos, solo el programa_jefe.prg tiene los includes enlazados entre si.
tanto si el programa_jefe.prg necesita aceder alguna variable de algun include.
como si de algun include, necesita aceder algo del programa_jefe.prg
incluso de algun include, necesita aceder un dato de otro include.
Flecha verde: declaran que necesita conectar con include <codig>.prg
Flecha azul: los accesos entre programa_jefe.prg y todos los includes conectados, todos son accesibles entre si.
(http://i.imgur.com/fYaXsnV.jpg)
la idea de los include es poder dividir el PRG principal en varios archivos.prg, para organizarte mejor.
El compilador deberia comprobar todos los includes, y realizar la compilacion final, con todos los PRG juntos, como si de 1 se tratase realmente.
no me puede decir que no reconoce una variable, que se llamó dentro de un include extra.prg, cuando esta declarado en el programa_jefe.prg que es el punto de partida a la hora de compilar.
No entiendo tu explicación ni el gráfico, pero los includes funcionan perfectamente.
Lo único que estés haciendo esos includes antes de declarar las variables globales. Debes hacerlo en orden, lógicamente.
Esto está mal:
include "otro.prg";
global
variable;
end
Esto está bien:
global
variable;
end
include "otro.prg";
los include funcionan perfectamente como dijo panreyes... el tema es que los estas usando de forma incorrecta... esto es valido para cualquier lenguaje, primero incluyes lo que quieres se vea, y luego lo usas...
no es conveniente incluir el .prg directamente, deberias incluir un .h o .header o como quieras llamarlo, donde solo esten las declaraciones de las cosas que quieras se vean desde otros .prg, y luego incluyes el resto
Quote from: panreyes on November 14, 2016, 01:01:35 AM
No entiendo tu explicación ni el gráfico, pero los includes funcionan perfectamente.
Lo único que estés haciendo esos includes antes de declarar las variables globales. Debes hacerlo en orden, lógicamente.
Esto está mal:
include "otro.prg";
global
variable;
end
Esto está bien:
global
variable;
end
include "otro.prg";
ese era mi fallo:
despues de los import...
hacia llamar los includes... <----
y despues declaraba las global, locals....
y al compilar no reconocia las variables....
ahora cambiando el orden:
-import
-global,local
-includes <----
-procesos/funciones.
espero que con la explicación de splinter ya no te sientas decepcionada
Para evitar ese error mi modo de trabajar es el siguiente:
- Tengo un .prg llamado global.prg que contiene todas las declaraciones de globales, locales y constantes así como los declares de las funciones y procesos que lo requieran. Este fichero lo incluyo con include justo debajo de los import.
- Tengo un fichero includes que contiene los includes de todos los ficheros y lo incluyo justo debajo de la inclusión de global.prg.
De esta manera me aseguro de tener control sobre el orden en el que se incluyen y declaran las cosas.
Ejemplo: https://github.com/rfstudios/LittleTales/blob/master/includes.prg
+1 a lo dicho. Include viene a decirle al compilador "¡oye! copia aquí el contenido de este fichero".
Y aquí es cuando los conocimientos de otros lenguajes se vuelven útiles: en C, por ejemplo, se tenía los ficheros .h (header) donde se realizaban las declaraciones de variables y métodos, y aparte, los ficheros .c/.cpp con el código en sí.
Yo recomiendo hacer lo mismo en Bennu: por cada código que separes, ten un .h con sus propias declaraciones. Es más, si miras mis códigos, tengo declaraciones de variables globales en muchísimos ficheros diferentes, porque así los tengo separados y sé en qué procesos/funciones los estoy usando, y si en algún momento dejo de usarlos, comento su .h y no tengo que buscar dichas variables en una larga lista de globales. Además, viene de lujo para los "declare", que se utilizan con las variables públicas.
No tenemos clases, pero tenemos includes :D
Quote from: Drumpi on November 15, 2016, 01:47:21 AM
+1 a lo dicho. Include viene a decirle al compilador "¡oye! copia aquí el contenido de este fichero".
Y aquí es cuando los conocimientos de otros lenguajes se vuelven útiles: en C, por ejemplo, se tenía los ficheros .h (header) donde se realizaban las declaraciones de variables y métodos, y aparte, los ficheros .c/.cpp con el código en sí.
Yo recomiendo hacer lo mismo en Bennu: por cada código que separes, ten un .h con sus propias declaraciones. Es más, si miras mis códigos, tengo declaraciones de variables globales en muchísimos ficheros diferentes, porque así los tengo separados y sé en qué procesos/funciones los estoy usando, y si en algún momento dejo de usarlos, comento su .h y no tengo que buscar dichas variables en una larga lista de globales. Además, viene de lujo para los "declare", que se utilizan con las variables públicas.
No tenemos clases, pero tenemos includes :D
exacto! muy bien explicado Drumpi!
pido disculpas, es que me altere, cuando no me dejaba compilar :'(
para mi es importante usar include para poder organizarme mejor el programa y no liarme.
ahora he aprendido mejor como organizarme gracias a vosotros.
reconozco que hace mucho que no me paso por aqui y perdi el hilo de bennugd, estaba en otro mundo.
siempre es bueno aprender cosas nuevas.
por mi parte no es necesario pedir disculpas.
Ni por el mío, para eso está el subforo.
Si vieras las tontadas que he llegado a mostrar por aquí... ^^U
Lo que sí recomiendo, como decía en el otro hilo, es darle un repasito de vez en cuando a la programación básica en C, para no perder las "buenas costumbres" por usar lenguajes de alto nivel. Vale que Java o Bennu te ayudan con cositas, pero no está de más, por ejemplo, inicializar las variables, o usar conversión explícita de tipos :P
avandono el uso de los includes sinceramente
como puede ser que me devuelva error en un elemento de un proceso , una variable privada de da error?!
al final tengo esto:
programa_jefe.prg
-declaro los import que necesito
-declaro include "global.prg"; aqui dentro tengo declaradas CONST y GLOBAL (TODAS)
-declaro LOCAL
-include mascosa.prg , contiene procesos...
...
-include mascosa5.prg , contiene procesos...
-declaro PROCESS MAIN(); y empieza el codigo jefe....
NO SE COMO ORGANIZARME LOS DATOS GLOBALES/CONST Y LOS PROCESOS.
pero no quiero volver a la antigua epoca de Div2 que tenia todo en unico PRG gigantesco :'( :'( :'( :'(
mete todas las definiciones y variables en el main, y en los includes/ficheros adjuntos, metes procesos (agrupados por tematica o relacion), para que no tengas todo en el main.
yo sigo preferiendo tenerlo todo en el main, cada una lo hace como mas comoda se sienta
¿Qué error te da exactamente?
Si te da error porque no reconoce una variable privada, lo más seguro es que se te haya olvidado poner un END en alguna parte ¡La de problemas que he tenido yo por no cerrar un switch! Me da el error en código5.inc y resulta que en código4.inc o en código3.inc he cerrado todos los CASE pero no el SWITCH.
Quote from: Drumpi on November 25, 2016, 02:48:02 AM
¿Qué error te da exactamente?
Si te da error porque no reconoce una variable privada, lo más seguro es que se te haya olvidado poner un END en alguna parte ¡La de problemas que he tenido yo por no cerrar un switch! Me da el error en código5.inc y resulta que en código4.inc o en código3.inc he cerrado todos los CASE pero no el SWITCH.
olvidado no...
mas bien
sobraba un END justo por encima de la variable privada y no la podia reconocer esa variable...(estaba fuera del proceso)
Solucionado y ejecuta bien.
:-[ :-[ :-[ :-[
si funciono mi estructura, como mencione en el primer post.
Queda demostrado: el 80-90% de los bugs que se detectan en el lenguaje, son por culpa del propio programador :D
No te preocupes, a todos nos pasan cosas así ;)
Que me deje un END??!!! Es de novata! :-[
Que vergüenza!!
Por ahora mantendré en esa distribución los includes.
Include Globales y conts
Includes de procesos y funciones...
simulatorone no se olvidaba los END ::)
Cierto, y también se sabía su clave. :o
Quote from: DCelso on November 25, 2016, 04:37:18 PM
Cierto, y también se sabía su clave. :o
no puedo recuperar esa cuenta, aun que le diga que me envien la reactivacion de la contraseña por correo electronico simulatorone@hotmail.com
por que nunca llega dicho email, tampoco llega en spam , ni nada....
no tuve otra que crearme una cuenta nueva.
Quote from: alicesimu on November 25, 2016, 07:38:47 PM
Quote from: DCelso on November 25, 2016, 04:37:18 PM
Cierto, y también se sabía su clave. :o
no puedo recuperar esa cuenta, aun que le diga que me envien la reactivacion de la contraseña por correo electronico simulatorone@hotmail.com
por que nunca llega dicho email, tampoco llega en spam , ni nada....
no tuve otra que crearme una cuenta nueva.
yo creo que si envias a panreyes o a josebita un mail desde esa cuenta (de mail) comentando tu problema, y ellos verifican que ese es tu mail de registro, estoy seguro que podran resetearte la contraseña.
Quote from: SplinterGU on November 25, 2016, 08:48:51 PM
Quote from: alicesimu on November 25, 2016, 07:38:47 PM
Quote from: DCelso on November 25, 2016, 04:37:18 PM
Cierto, y también se sabía su clave. :o
no puedo recuperar esa cuenta, aun que le diga que me envien la reactivacion de la contraseña por correo electronico simulatorone@hotmail.com
por que nunca llega dicho email, tampoco llega en spam , ni nada....
no tuve otra que crearme una cuenta nueva.
yo creo que si envias a panreyes o a josebita un mail desde esa cuenta (de mail) comentando tu problema, y ellos verifican que ese es tu mail de registro, estoy seguro que podran resetearte la contraseña.
Sip, a mi me pasó lo mismo teniendo también la cuenta con un correo de hotmail. Me cambió Panreyes a mano el correo de la cuenta del foro por otro mío de gmail y problema resuelto. No es la primera vez que me pasa algo así con ese correo, hotmail cada vez me da mas problemas y tengo esa cuenta casi abandonada.
Yo también abandoné la cuenta de hotmail, a ver si la cierran de una vez