Variable automatica

En la programación informática, una variable automática es una variable local que se asigna y desasigna automáticamente cuando el subproceso de ejecución del programa entra y sale del alcance de la variable. El alcance es el contexto léxico, específicamente la función o bloque en el que se define la variable. Los datos locales suelen ser (en la mayoría de los idiomas) invisibles fuera de la función o el contexto léxico en el que se definen. Los datos locales también son invisibles e inaccesibles para la función llamada , [nota 1] , pero no se liberan y vuelven al alcance cuando el hilo de ejecución vuelve a la persona que llama.

El concepto de variables locales automáticas se utiliza principalmente en lenguajes recursivos con alcance léxico . [nota 2] Las variables locales automáticas generalmente se colocan en el marco de la pila del procedimiento en el que se declaran. [nota 3] Esto se hizo originalmente para lograr una resolución de reingreso y recurrencia , [nota 4] una consideración que sigue siendo relevante en la actualidad. El concepto de variables automáticas en funciones recursivas (y anidadas ) en un lenguaje de alcance léxico se presentó a una amplia audiencia con ALGOL a fines de la década de 1950 y sus muchos descendientes lo propagaron aún más.

El término variable local suele ser sinónimo de variable automática, ya que en muchos lenguajes de programación es lo mismo, pero variable local es más general - la mayoría de las variables locales son variables locales automáticas, pero también existen variables locales estáticas , especialmente en C Para una variable local estática, la asignación de un área de memoria es estática (el tiempo de vida es la ejecución completa del programa), no automática, pero está dentro del alcance solo durante la ejecución de la función.

En lenguajes de programación específicos

C, C++

(Las variables automáticas se denominan variables automáticas )

Todas las variables declaradas en un bloque de código son automáticas por defecto. Una variable automática no inicializada tiene un valor indefinido hasta que se le asigna un valor válido de su tipo. [1]auto Se puede agregar un especificador a estas declaraciones de variables, pero dado que todas son automáticas de forma predeterminada, esto es completamente redundante y rara vez se hace.

En C, el uso de la palabra clave registeres una sugerencia para que el compilador almacene en caché la variable en un registro del procesador. Además de prohibir el uso del operador de dirección ( &) en una variable o cualquiera de sus subcomponentes, el compilador puede ignorar esta sugerencia. [2]

En C++, el constructor automático de variables se llama cuando la ejecución llega al lugar de la declaración. Se llama al destructor cuando llega al final del bloque de programa dado (los bloques de programa están encerrados entre llaves). Esta función se usa a menudo para administrar la asignación y desasignación de recursos, como abrir y cerrar archivos automáticamente o liberar memoria. Consulte Inicialización de recursos es Inicialización (RAII).

A partir de C++11, C++ permite que las variables se declaren con la palabra clave auto[3] , pero esto significa que el tipo de la variable se infiere y está fuera del alcance de la variable.

Java

(Las variables automáticas se denominan variables locales )

Similar a C y C++, pero no hay palabra clave autoo register. Sin embargo, el compilador de Java no permitirá el uso de una variable local que no esté explícitamente inicializada y emitirá un error de compilación (a diferencia de C y C++, donde el compilador generalmente solo emite una advertencia). El estándar del lenguaje Java requiere que cada variable local se inicialice antes de usarla. [4] Esto es diferente de las variables de objeto, que se inicializan implícitamente con valores predeterminados (que son0para números ynulopara objetos).

perl

(Las variables automáticas se denominan variables léxicas , my o privadas ).

En Perl, las variables locales se declaran con la extensión my. Las variables escalares no inicializadas tendrán el valor undef; las matrices o hashes no inicializados serán (). [5]

Perl también tiene un local, que no crea variables automáticas [6] , sino que asigna a las variables globales (por lotes) un valor temporal que se adjunta dinámicamente al bloque circundante. Cuando una variable sale del alcance, se restaura el valor anterior.

Véase también

Notas

  1. si no es una función anidada que se define junto con los datos locales
  2. aunque existen en una forma similar pero no idéntica también en lenguajes recursivos de ámbito dinámico como los antiguos LISP
  3. a menos que se indique lo contrario, como datos estáticos o datos de montón, que se especifican en algunos idiomas
  4. Al usar la propiedad de reentrada de la subrutina, para recursividad o de otro modo, el optimizador no debe intentar asignar tales variables en los registros del procesador (por eficiencia), ya que esto rompería la reentrada.

Enlaces

  1. ↑ para el estándar C de 2008 . (3.61  MiB ) : sección 6.2.4, Duraciones de almacenamiento de objetos 
  2. Duración del almacenamiento , < https://en.cppreference.com/w/c/language/storage_duration > 
  3. Especificadores de tipo de marcador de posición , < http://en.cppreference.com/w/cpp/language/auto > 
  4. 4.12.5 Valores iniciales de las variables . Microsistemas Sun. Consultado el 17 de octubre de 2008.
  5. Variables privadas a través de my() - perlsub - perldoc.perl.org . Consultado el 17 de octubre de 2008.
  6. Valores temporales vía local() - perlsub - perldoc.perl.org . Consultado el 25 de febrero de 2011.