stringtranslate.com

Etiqueta (informática)

En los lenguajes de programación , una etiqueta es una secuencia de caracteres que identifica una ubicación dentro del código fuente . En la mayoría de los lenguajes, las etiquetas toman la forma de un identificador , a menudo seguido de un carácter de puntuación (por ejemplo, dos puntos ). En muchos lenguajes de alto nivel , el propósito de una etiqueta es actuar como el destino de una GOTOdeclaración. [1] [2] En lenguaje ensamblador , las etiquetas se pueden usar en cualquier lugar donde pueda haber una dirección (por ejemplo, como el operando de una instrucción JMPo MOV). [3] También en Pascal y sus variaciones derivadas. Algunos lenguajes, como Fortran y BASIC , admiten etiquetas numéricas. [4] Las etiquetas también se utilizan para identificar un punto de entrada en una secuencia compilada de declaraciones (por ejemplo, durante la depuración ).

do

En C, una etiqueta identifica una declaración en el código. Una sola declaración puede tener varias etiquetas. Las etiquetas solo indican ubicaciones en el código y llegar a una etiqueta no tiene ningún efecto en la ejecución real.

Etiquetas de funciones

Las etiquetas de función consisten en un identificador, seguido de dos puntos. Cada una de estas etiquetas apunta a una declaración en una función y su identificador debe ser único dentro de esa función. Otras funciones pueden usar el mismo nombre para una etiqueta. Los identificadores de etiqueta ocupan su propio espacio de nombres: se pueden tener variables y funciones con el mismo nombre que una etiqueta.

void foo ( int numero ) { if ( numero < 0 ) goto error ; bar ( numero ); return ; error : fprintf ( stderr , "¡Número inválido! \n " ); }            

Aquí el error es la etiqueta. La instrucción goto se puede utilizar para saltar a una instrucción etiquetada en el código. Después de un goto, la ejecución del programa continúa con la instrucción después de la etiqueta.

Cambiar etiquetas

Se pueden colocar dos tipos de etiquetas en una sentencia switch. Una etiqueta case consta de la palabra clave case, seguida de una expresión que evalúa a una constante entera. Una etiqueta default consta de la palabra clave default. Las etiquetas case se utilizan para asociar un valor entero con una sentencia en el código. Cuando se llega a una sentencia switch, la ejecución del programa continúa con la sentencia después de la etiqueta case con el valor que coincide con el valor entre paréntesis de la sentencia switch. Si no existe dicha etiqueta case, pero sí una etiqueta default, la ejecución del programa continúa con la sentencia después de la etiqueta default. Si no existe una etiqueta default, la ejecución del programa continúa después de la sentencia switch.

switch ( die ) { predeterminado : printf ( "inválido \n " ); break ;   caso 1 : caso 3 : caso 5 : printf ( "odd \n " ); break ;     caso 2 : caso 4 : caso 6 : printf ( "even \n " ); break ; }     

Dentro de una sola declaración switch , la constante entera asociada con cada etiqueta de caso debe ser única. Puede haber o no una declaración predeterminada. No hay ninguna restricción en el orden de las etiquetas dentro de un switch. El requisito de que los valores de las etiquetas de caso se evalúen como constantes enteras le da al compilador más espacio para las optimizaciones.

Ejemplos

Javascript

En la sintaxis del lenguaje JavaScript las declaraciones pueden ir precedidas de la etiqueta:

top : //Etiqueta el bucle for más externo. for ( var i = 0 ; i < 4 ; i ++ ) { for ( var j = 0 ; j < 4 ; j ++ ) { if ( j === 3 && i === 2 ) { alert ( "i=" + i + ", j=" + j ); //i=2, j=3 break top ; } } }                                         alerta ( "i=" + i + ", j=" + j ); //i=2, j=3       

También es posible utilizar breakla declaración para salir de los bloques de código:

arriba : { console.log ( " foo " ) console.log ( " bar " ) break arriba console.log ( " baz " )      } // Lo que daría como resultado: // > foo // > bar

Ceceo común

En Common Lisp existen dos formas de definir etiquetas. La primera implica el tagbodyoperador especial. Distinguiendo su uso de muchos otros lenguajes de programación que permiten la navegación global, como C , las etiquetas sólo son accesibles en el contexto de este operador. Dentro de un código, tagbodylas etiquetas se definen como formas que comienzan con un símbolo; la goforma especial permite una transferencia de control entre estas etiquetas. [5]

( let (( iteración NIL )) ( cuerpo de etiqueta inicio ( imprimir 'iniciado ) ( setf iteración 0 ) incremento ( imprimir iteración ) ( incf iteración 1 ) ( ir comprobar ) comprobar ( si ( >= iteración 10 ) ( ir fin ) ( ir aumentar )) fin ( imprimir 'listo )))                             

Un segundo método utiliza las macros de lectura y , la primera de las cuales etiqueta el objeto que le sigue inmediatamente, la segunda se refiere a su valor evaluado. [6] Las etiquetas en este sentido constituyen más bien una alternativa a las variables, con la declaración e inicialización de una “variable” y el acceso a ella. El marcador de posición n designa un entero decimal sin signo elegido que identifica la etiqueta.#n=#n##n=#n#

( progn #1= "hola" ( print #1# ))   

Aparte de eso, algunas formas permiten o exigen la declaración de una etiqueta para una referencia posterior, incluida la forma especial blockque prescribe un nombre y la loopmacro que se puede identificar mediante una namedcláusula. Es posible abandonar inmediatamente una forma nombrada utilizando el return-fromoperador especial.

( bloque myblock ( bucle para iteración desde 0 hacer ( si ( >= iteración 10 ) ( retorno-de myblock 'hecho ) ( imprimir iteración ))))                
( bucle llamado myloop para la iteración desde 0 hacer ( si ( >= iteración 10 ) ( retorno de myloop 'hecho ) ( imprimir iteración )))                

De manera similar a C, las macros case, ccase, ecase, [7] typecase y ctypecasedefinen etypecasesentencias switch. [8]

( let (( mi-valor 5 )) ( case mi-valor ( 1 ( print "uno" )) ( 2 ( print "dos" )) (( 3 4 5 ) ( print "tres cuatro o cinco" )) ( else ( print "cualquier otro valor" ))))                  
( let (( my-value 5 )) ( typecase my-value ( list ( print "una lista" )) ( string ( print "una cadena" )) ( number ( print "un número" )) ( else ( print "cualquier otro tipo" ))))                

Véase también

Referencias

  1. ^ "Sección 6.8.6.1 del estándar C La sentencia goto". Archivado desde el original el 24 de diciembre de 2007. Consultado el 3 de julio de 2008 .
  2. ^ "Instrucción GOTO QuickSCREEN". Microsoft. 1988. Archivado desde el original el 25 de julio de 2009. Consultado el 3 de julio de 2008 .
  3. ^ O. Lawlor. "nasm x86 Assembly" . Consultado el 3 de julio de 2008 .
  4. ^ "Diferencias entre GW-BASIC y QBasic". Archivado desde el original el 10 de febrero de 2010.
  5. ^ Kent Pitman. «CLHS: operador especial TAGBODY» . Consultado el 18 de agosto de 2020 .
  6. ^ Kent Pitman. "CLHS: Sección 2.4.8" . Consultado el 18 de agosto de 2020 .
  7. ^ Kent Pitman. "CLHS: Macro CASE, CCASE, ECASE" . Consultado el 20 de agosto de 2020 .
  8. ^ Kent Pitman. "CLSH: Macro TYPECASE, CTYPECASE, ETYPECASE" . Consultado el 20 de agosto de 2020 .