stringtranslate.com

Variable automática

En programación informática , una variable automática es una variable local que se asigna y desasigna automáticamente cuando el flujo del programa entra y sale del ámbito de la variable. El ámbito es el contexto léxico, en particular la función o el bloque en el que se define una variable. Los datos locales suelen ser (en la mayoría de los lenguajes) invisibles fuera de la función o el contexto léxico donde se definen. Los datos locales también son invisibles e inaccesibles para una función llamada , [nota 1] pero no se desasignan, volviendo al ámbito cuando el hilo de ejecución regresa al llamador.

Las variables locales automáticas se aplican principalmente a lenguajes recursivos de ámbito léxico . [nota 2] Las variables locales automáticas normalmente se asignan en el marco de pila del procedimiento en el que se declaran. [nota 3] Esto se hizo originalmente para lograr la reentrada y permitir la recursión , [nota 4] una consideración que todavía se aplica hoy. El concepto de variables automáticas en funciones recursivas (y anidadas ) en un lenguaje de ámbito léxico se presentó al público en general con ALGOL a fines de la década de 1950 y se popularizó aún más gracias a sus muchos descendientes.

El término variable local suele ser sinónimo de variable automática, ya que son lo mismo en muchos lenguajes de programación, pero 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 es estática (la duración es la ejecución completa del programa), no automática, pero solo está dentro del alcance durante la ejecución de la función.

En lenguajes de programación específicos

C, C++

(Llamadas variables automáticas .)

Todas las variables declaradas dentro de un bloque de código son automáticas de forma predeterminada. Una variable automática no inicializada tiene un valor indefinido hasta que se le asigna un valor válido de su tipo. [1] El especificador de clase de almacenamiento autotambién se puede agregar a estas declaraciones de variables, pero como todas son automáticas de forma predeterminada, esto es completamente redundante y rara vez se hace.

En C, el uso de la clase de almacenamiento registeres una indicación para que el compilador almacene en caché la variable en un registro del procesador. Además de no permitir que se utilice el operador de dirección ( &) en la variable o en cualquiera de sus subcomponentes, el compilador tiene la libertad de ignorar la indicación. [2]

En C++ , el constructor de variables automáticas se llama cuando la ejecución llega al lugar de la declaración. El destructor se llama cuando llega al final del bloque de programa dado (los bloques de programa están rodeados por llaves). Esta característica se utiliza a menudo para gestionar la asignación y desasignación de recursos, como abrir y luego cerrar automáticamente archivos o liberar memoria. Consulte Adquisición de recursos es inicialización (RAII).

Desde C++11, C++ permite declarar variables con el autoespecificador de tipo, [3] pero esto significa que el tipo de la variable se infiere y no se refiere al alcance de la variable.

Java

(Llamadas variables locales ).

Similar a C y C++, pero no hay una palabra clave autoor register. Sin embargo, el compilador de Java no permitirá el uso de una variable local no inicializada explícitamente y dará un error de compilación (a diferencia de C y C++ donde el compilador generalmente solo dará una advertencia). El estándar de Java exige que cada variable local se inicialice explícitamente antes de ser utilizada. [4] Esto difiere de las variables de instancia, que se inicializan implícitamente con valores predeterminados (que son0para números ynulopara objetos).

Perl

(Llamadas variables léxicas , mías o privadas ).

En Perl, las variables locales se declaran utilizando el myoperador . Los escalares no inicializados tendrán el valor undef; las matrices o hashes no inicializados tendrán el valor (). [5]

Perl también tiene un localoperador que no crea variables automáticas, [6] en lugar de eso, les otorga a las variables globales (de paquete) un valor temporal, cuyo alcance dinámico se limita al bloque que las contiene. Cuando se abandona el alcance de la variable, se restaura el valor anterior.

Véase también

Notas

  1. ^ a menos que sea una función anidada , que a su vez esté definida a lo largo de esos datos locales
  2. ^ aunque existen en una forma algo similar, pero no idéntica, también en lenguajes recursivos con alcance dinámico , como las variantes más antiguas de LISP
  3. ^ a menos que se especifique lo contrario, como datos estáticos o basados ​​en montón, que son especificables en algunos idiomas
  4. ^ Cuando se utiliza la propiedad reentrante de la rutina, para recursión o de otro modo, el optimizador no debe intentar asignar dichas variables en los registros del procesador (por eficiencia) ya que esto rompería la reentrada.

Referencias

  1. ^ "Estándar C" actual (PDF) .  (3,61  MiB ) : sección 6.2.4, Duración del almacenamiento de los objetos
  2. ^ "Duración del almacenamiento", cppreference.com
  3. ^ "Especificadores de tipo de marcador de posición", cppreference.com
  4. ^ "4.12.5 Valores iniciales de las variables". Sun Microsystems . 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 mediante local() - perlsub - perldoc.perl.org" . Consultado el 25 de febrero de 2011 .