Diferencia entre revisiones de «static»

De ArduWiki
Saltar a: navegación, buscar
(Sintaxis)
(Vea también)
 
(No se muestran 23 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
La palabra clave '''static''' se usa para crear variables que solo son visibles dentro de una función. Sin embargo a diferencia de las variables locales que se crean y destruyen cada vez que se invoca una función, las variables '''estatic''' persisten más allá de la llamada a la función, preservan sus datos entre llamadas a funciones.
+
Palabra clave conocida como '''calificadora'''. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el [[boceto]] deben tratar dicha variable.
  
{Norta|Las variables declaradas como static sólo se crean e inicializan la primera vez que una función se llama.}}
+
Se usa para crear variables que solo son visibles dentro de una función. Sin embargo a diferencia de las variables locales que se crean y destruyen cada vez que se invoca una función, las variables '''static''' persisten más allá de la llamada a la función, preservan sus datos entre llamadas a funciones.
 +
 
 +
{{Nota|Las variables declaradas como '''static''' sólo se crean e inicializan la primera vez que una función se llama.}}
  
 
== Sintaxis ==
 
== Sintaxis ==
 
<pre>
 
<pre>
static tipo variable [= valor];
+
static [tipo] variable [= valor];
 
</pre>
 
</pre>
 +
 +
== Parámetros ==
 +
;tipo: tipo de dato. Puede ser [[char]], [[byte]]; [[int]], [[long]], [[float]], etc de forma explicita u incluir un subfijo en '''valor'''
 +
 +
{| class="wikitable col2cen"
 +
|+Subfijos
 +
!Tipo!!Subfijo!!Ejemplo
 +
|-
 +
|[[int]]||ninguno||123
 +
|-
 +
|[[unsigned int]]||U||123U
 +
|-
 +
|[[long]]||L||123L
 +
|-
 +
|[[unsigned long]]||UL||123UL
 +
|-
 +
|[[float]]||F||1.23F
 +
|}
 +
 +
;variable:nombre de la variable a declarar.
 +
;valor:valor a almacenar en el rango del tipo de dato. Puede especificar la '''base''' del dato usando un prefijo.
 +
 +
{| class="wikitable col2cen"
 +
|+Prefijos
 +
!Base!!Prefijo!!Comentario!!Ejemplo
 +
|-
 +
|DEC||ninguno||Dígitos 0~9||123
 +
|-
 +
|HEX||0x||dígitos 0~9 + Caracteres A~F||0x7B
 +
|-
 +
|OCT||0||digitos 0~7||0173
 +
|-
 +
|BIN||B||0 o 1||B1110011
 +
|}
 +
 +
== Retorno ==
 +
Nada.
 +
 +
== Comentarios ==
 +
* Todas las variables son almacenadas en [[SRAM]] salvo [[const]].
  
 
== Advertencias ==
 
== Advertencias ==
Nada.
+
* Solo son visibles dentro de la función donde fueron creadas.
 +
* A diferencia de una [[variable local]] que se destruyen al finalizar la función, las variables '''static''' sobreviven a la función y mantienen su valor en la próxima llamada a dicha función.
  
 
== Ejemplo ==
 
== Ejemplo ==
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
const byte alto 20
+
const byte alto = 20;
const byte bajo -20
+
const char bajo = -20;
 
const byte paso = 5;    //Tamaño de paso
 
const byte paso = 5;    //Tamaño de paso
  
Línea 23: Línea 66:
 
void loop(){
 
void loop(){
 
   static int posicion;
 
   static int posicion;
   hoy = camino(paso);
+
   int hoy = camino(paso);
 
   Serial.println(hoy);
 
   Serial.println(hoy);
 
   delay(10);
 
   delay(10);
Línea 29: Línea 72:
  
 
int camino(byte mover){
 
int camino(byte mover){
   posicion = posicion + (random(-mover, mover + 1));
+
   posicion += random(-mover, mover + 1);
 
   if (posicion < bajo){          //Comprueba los límites alto y bajo
 
   if (posicion < bajo){          //Comprueba los límites alto y bajo
 
       posicion = alto;            //Refleja el número de vuelta en dirección negativa
 
       posicion = alto;            //Refleja el número de vuelta en dirección negativa
Línea 40: Línea 83:
  
 
== Vea también ==
 
== Vea también ==
 +
* [[variable publica]]
 +
* [[variable local]]
 +
* [[matriz]]
 
* [[volatile]]
 
* [[volatile]]
 
* [[const]]
 
* [[const]]
 +
* [[include|#include]]
 +
* [[define|#define]]
 +
* [[Comentarios]] - <nowiki>(//)</nowiki>
 +
 +
== Referencias ==
 +
* [https://www.arduino.cc/reference/en/language/variables/variable-scope--qualifiers/static/ Guia de referencia]
  
 
[[Category:Variables]]
 
[[Category:Variables]]

Revisión actual del 00:21 2 feb 2020

Descripción

Palabra clave conocida como calificadora. Se usa antes del tipo de datos de una variable, para modificar la manera en que el compilador y el boceto deben tratar dicha variable.

Se usa para crear variables que solo son visibles dentro de una función. Sin embargo a diferencia de las variables locales que se crean y destruyen cada vez que se invoca una función, las variables static persisten más allá de la llamada a la función, preservan sus datos entre llamadas a funciones.

Nota: Las variables declaradas como static sólo se crean e inicializan la primera vez que una función se llama.


Sintaxis

static [tipo] variable [= valor];

Parámetros

tipo
tipo de dato. Puede ser char, byte; int, long, float, etc de forma explicita u incluir un subfijo en valor
Subfijos
Tipo Subfijo Ejemplo
int ninguno 123
unsigned int U 123U
long L 123L
unsigned long UL 123UL
float F 1.23F
variable
nombre de la variable a declarar.
valor
valor a almacenar en el rango del tipo de dato. Puede especificar la base del dato usando un prefijo.
Prefijos
Base Prefijo Comentario Ejemplo
DEC ninguno Dígitos 0~9 123
HEX 0x dígitos 0~9 + Caracteres A~F 0x7B
OCT 0 digitos 0~7 0173
BIN B 0 o 1 B1110011

Retorno

Nada.

Comentarios

  • Todas las variables son almacenadas en SRAM salvo const.

Advertencias

  • Solo son visibles dentro de la función donde fueron creadas.
  • A diferencia de una variable local que se destruyen al finalizar la función, las variables static sobreviven a la función y mantienen su valor en la próxima llamada a dicha función.

Ejemplo

const byte alto = 20;
const char bajo = -20;
const byte paso = 5;     //Tamaño de paso

void setup(){
   Serial.begin(115200);
}
void loop(){
   static int posicion;
   int hoy = camino(paso);
   Serial.println(hoy);
   delay(10);
}

int camino(byte mover){
   posicion += random(-mover, mover + 1);
   if (posicion < bajo){           //Comprueba los límites alto y bajo
      posicion = alto;             //Refleja el número de vuelta en dirección negativa
   }else if(posicion > alto){
      posicion = bajo;             //Refleja el número de vuelta en dirección positiva
   }
  return posicion;
}

Vea también

Referencias