TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: tithanae en 20 de Noviembre de 2009, 13:28:12
-
bueno pues eso el leido el manual de ccs y no he entendido del todo la funcion de una variable static, y/o cuando se usa o debe declararse una variable tipo static tal ves con un ejemplo de algun colega y una explicacion en leguaje criollo despeje mis dudas. como siempre de antemano gracias.
-
Se usan para variables locales de una función, pero al hacer llamadas sucesivas el valor se mantiene. En una función cuando se declara una variable, el lugar de memoria es compartido con variables de otra función, en cambio al declararla como static, se reserva el lugar de memoria.
Saludos!
-
Una variable se define como static cuando necesitas que sea visible sólo dentro del ámbito de una determinada función, y además necesitas que el valor de la variable sea recordado cada vez que entres en la función.
A nivel práctico, la única diferencia entre una variable static y una global es que sólo se verá en la función donde esté declarada.
-
Entendido muy claramente.
-
Una variable se define como static cuando necesitas que sea visible sólo dentro del ámbito de una determinada función, y además necesitas que el valor de la variable sea recordado cada vez que entres en la función.
A nivel práctico, la única diferencia entre una variable static y una global es que sólo se verá en la función donde esté declarada.
Oh qué bien, yo pensaba que Static solo existía en programación orientada a objetos y que se usaba para poder llamar una función de una clase sin que exista un objeto instanciado de la misma clase sobre el que se pueda aplicar tal función.
-
Hola, otro uso de la palabra static es para las variables globales y que tengan solo visibilidad dentro del módulo donde se las declara.
Ejemplo:
De esta manera la variable global Pepe solo puede ser utilizada dentro del módulo donde esta declara, cualquier uso en otro módulo el linker generará un error. En el paradigma de objetos esto es llamado encapsulación
Saludos !
-
Muchacho ya que estamos hablando de las variables:
Siempre he tenido esta duda, yo estoy creando una libreria y quiero que una variable de mi libreria por ejemplo "HOLA.c" se vea como una variable global, es decir que se vea tanto en el programa principal como en las otras librerias que pueda crear.
-
Hola, si la variable la tenes declara asi en algunos de tus modulos de esta manera
Para usarla en algún módulo fuera de la implementaciíon, solo tenes que declarla asi:
Saludos !
-
Oh qué bien, yo pensaba que Static solo existía en programación orientada a objetos y que se usaba para poder llamar una función de una clase sin que exista un objeto instanciado de la misma clase sobre el que se pueda aplicar tal función.
Me perdiste leo y releo y nada tal ves un ejemplo de tu aporte me ilumine.
-
Hum... OK.
Tengo una clase llamada San_HID_Library:
public class San_HID_library
{
public static SafeFileHandle ConectarWiimote()
{
//Datos únicos del Wiimote
const Int16 VID = 0x057e;
const Int16 PID = 0x0306;
//Lista para guardar todo Wiimote que se haya encontrado
List<String> rutasHID = new List<String>();
//Investiga GUID de los HID
System.Guid myGuid = new System.Guid();
HidD_GetHidGuid(ref myGuid);
...
return var;
}
}
Entonces se ve que la clase tiene un método llamado ConectarWiimote(). Ese método es static.
Al ser static no necesito instanciar un objeto de la clase San_HID_Library para poder aplicar tal método sobre él.
Veamos código erróneo:
San_HID_Library objeto = new San_HID_Library(); //Instancia un objeto de la clase
SafeFileHandle wii;
wii = objeto.ConectarWiimote(); //No es correcto ya que static no requiere actuar sobre objetos de la clase
Veamos el código correcto:
SafeFileHandle wii;
wii = San_HID_Library.ConectarWiimote(); //Actúa sin tener objetos instanciados de la clase
Al menos eso es lo que he ido entendiendo de la POO por simple experiencia, no porque la haya aprendido en la escuela formalmente :oops:
-
yo he estado estudiando un poco la POO (con JAVA) y por lo que he leído, el uso de métodos y variables estáticas es para usarlo como variables globales en un proyecto, las otras definiciones es como la menciona Santiago, para usarlas sin tener que crear un objeto (métodos huérfanos).
Supongo que habrán creado esta forma de usar métodos, para mantener una cierta compatibilidad hacia atrás (y programar sin las reglas de la POO)
ahora, después de leer todos esos conceptos, me hace mirar con otra perspectiva la forma en que ccs usa el static, forma un poco rara por cierto, una variable global que no es visible globalmente :shock:
-
Métodos huérfanos... oohhhh. Gracias Pali.
Esta gente que le pone nombre a la POO... son ingeniosos, son como las instancias anónimas :D
-
ahora, después de leer todos esos conceptos, me hace mirar con otra perspectiva la forma en que ccs usa el static, forma un poco rara por cierto, una variable global que no es visible globalmente
Eso es lo que yo habia entendido cuando lei el manual y me pregunte tonses para que se usa? entonses los amigos mas arriba me dieron unos ejemplos con lo que lo entendi mejor.
-
Métodos huérfanos... oohhhh. Gracias Pali.
Esta gente que le pone nombre a la POO... son ingeniosos, son como las instancias anónimas :D
jeje de hecho el nombre que le dan en algunos libros, son métodos de clases.
-
una consulta
quiero declarar una variable estatica dentro de una funcion e inicializarla con un valor
static int valor=15;
sera posible que solo se inicialize la primera vez con el valor de 15 o es que en cada llamada a la funcion la variable se inicializa??
gracias
-
Se inicializa al comienzo del programa como las variables globales. Solo que el nombre es válido dentro de la función. Mas precisamente dentro de laa llaves {}
-
una consulta
quiero declarar una variable estatica dentro de una funcion e inicializarla con un valor
static int valor=15;
sera posible que solo se inicialize la primera vez con el valor de 15 o es que en cada llamada a la funcion la variable se inicializa??
gracias
Según tengo entendido, la variable estática se inicia en alguna parte al inicio del código, antes de ejecutar la función main, ese proceso es como una caja negra para el usuario. O también solo se ejecuta la primera vez que se ejecuta esa línea.
Cuando ejecutas la función que contiene static int valor=15; por segunda vez o las siguientes, esa variable ya esta con ese valor, es decir no se ejecuta dicha línea.
-
DominusDDR gracias por la aclaracion , es de mucha ayuda las variables estaticas en funciones para evitar el uso de variables globales y tener mejor claridad y control sobre estas
-
DominusDDR gracias por la aclaracion , es de mucha ayuda las variables estaticas en funciones para evitar el uso de variables globales y tener mejor claridad y control sobre estas
Es como te sientas cómodo al escribir tu código, porque sea global, estática o variable en una estructura de datos. Al final, para todas esas opciones, el compilador reserva localidades fijas de memoria en la ram.