Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda de novato en c (creo)

Iniciado por zunou, 14 de Junio de 2009, 02:45:23 AM

« anterior - próximo »

zunou

Pues en pricipio es una duda un poco tonta, pero que me tiene loco :D, es por las variables globales en c, siempre me han dicho que no es bueno utilizarlas, que no es politicamente correcto, o que pueden producir errores  ??? lo mismo ocurre con c++

¿Pero porque? ¿cual es exactamente el problema?

¿Sería mas correcto hacerlo así?:

Typedef struct {

u8 variable1;

u8 variable2;

} globales;

Será una tontría, pero es que ahora estoy con un prográma en el que tengo que utilizar unas cuantas globales, y no se si en el futuro ma dará problemas  ^_^', he mirado en manuales, pero ninguno hace referencia concreta a este tema  ???

saludos

[EX3]

Supongo que igual que el señor Goto, error no provocara pero si sera facil liarla cuando el codigo sea mas complejo y tal. Me supongo que lo que necesitas en todo caso seria crearte una clase estatica y crear alli las propiedades public para acceder a tus variables privadas, que no globales. Esto te permitira acceder desde cualquier punto del programa a dichas propiedades, siendo algo mas limpio y organizado el codigo y cumpliendo la finalidad de ser "globales".

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

flipper83

primero poner este link q siempre lo explicará mejor q yo http://www.coders.me/errores-de-programacion/los-efectos-laterales

El caso de no utilizar variables globales es el mantenimiento de código y facilitar la lectura del código.

Estos problemas no ocurren si tienes pocas líneas de código, pero si el número empieza a ser alto, y se abusa de variables globales y sentencias de ruptura de flujo, el mantenimiento y el debugeo del código se vuelve una puta locura.

De ahí que se crearan los paradigmas de programación como la programación estructurada, ya q intentan solucionar estos problemas de de ahí que eviten crear variables globales y sentencias como el goto, el break, el continue... Aunq esto último parece más dificil XD, también recomienda hacer métodos más pequeños (hay hasta un área que se encarga del cálculo de la complejidad del código)

Otros paradigmas como la programación orientada a Objetos o los Patrones de diseño se encargan de esto, por aunq parezca una tonteria, coger un código escrito por otro como le saliera de las narices es un auténtico caos, porq no sabes de donde vienen las variables, a que afectan, o si un método tiene 5 puntos ruptura lo va a debugear cristo.

Y esto lo he sufirdo en mis carnes viendo código en j2me que la programación estructurada se ve poco XD, hasta yo mismo he vomitado algún código que me avergüenzo, pero en este caso el byte mandaba XD.

Asi te recomiendo que sigas muy al pie de la letra los paradigmas estrurada y orientación a objetos. y echale un ojo a los patrones de diseño que son pocos y muy útiles.

Vaya coñazo q he soltao
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

zunou

Pues si, la verdad es que puede resultar una locura, en mi caso según se va complicando mi programa, mas me doy cuenta del problema, incluso no se porqué pero me aparecen hasta bugs como valores erroneos  :D, en java, o en c++ como dice EX3 se soluciona creando una clase,  ¿pero y en c que no tiene clases? ¿como se soluciona?.
Lo unico que se me ocurre es la utilizacion de estructuras.


davur

Los problemas que pueden causar las variables globales se solucionan no utilizando variables globales en primer lugar.

flipper83

Cita de: zunou en 14 de Junio de 2009, 07:40:02 PM
Pues si, la verdad es que puede resultar una locura, en mi caso según se va complicando mi programa, mas me doy cuenta del problema, incluso no se porqué pero me aparecen hasta bugs como valores erroneos  :D, en java, o en c++ como dice EX3 se soluciona creando una clase,  ¿pero y en c que no tiene clases? ¿como se soluciona?.
Lo unico que se me ocurre es la utilizacion de estructuras.



utilizando programación estructurada, uno de sus fundamentos es q no hay variables globales. Si quieres pasar una variable de un metodo a otro pasa, como atributo del método.
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

[EX3]

O segun casos, hazlo como propiedad de la clase a la que, por contenido o tipo, este relacionada. Por ejemplo, los datos del modo de video que este usando el render grafico, ubicarlo como propiedad en tu clase manager de graficos. La cosa es, teniendo orientacion a objetos, jerarquizar lo maximo posible en vez de globalizar, ya que habra muchas cosas que sera mejor tenerlas ubicadas especificamente en un sitio concreto en vez de tenerlas mezcladas. Eso ayuda tambien a la hora de depurar el codigo ya que te facilita el trazado que haga la llamada a dicha variable.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

kbks

Cita de: [EX3] en 15 de Junio de 2009, 08:51:06 AM
O segun casos, hazlo como propiedad de la clase a la que, por contenido o tipo, este relacionada. Por ejemplo, los datos del modo de video que este usando el render grafico, ubicarlo como propiedad en tu clase manager de graficos. La cosa es, teniendo orientacion a objetos, jerarquizar lo maximo posible en vez de globalizar, ya que habra muchas cosas que sera mejor tenerlas ubicadas especificamente en un sitio concreto en vez de tenerlas mezcladas. Eso ayuda tambien a la hora de depurar el codigo ya que te facilita el trazado que haga la llamada a dicha variable.

Salu2...

Ha dicho que está utilizando C, no C++.

[EX3]

Cierto, mal entendi que hablaba de las variables globales de C pero intentando plantearlo en C++ ^_^'

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

zunou

Si, me referia a c  :D, pro ya me ha quedado mas o menos claro

gracias!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.