Címke (informatika) - Label (computer science)

A programozási nyelvű címke olyan karaktersorozat, amely azonosítja a helyet a forráskódban . A legtöbb nyelvben a címkék azonosító formát öltenek, amelyet gyakran írásjel (pl . Kettőspont ) követ . Sok magas szintű programozási nyelvben a címke célja, hogy egy utasítás céljaként működjön . Az összeállítás nyelvében a címkék bárhol használhatók, ahol csak lehet egy cím (például egy operandumként vagy utasításként). Szintén Pascal és az abból változatok. Néhány nyelv, például a Fortran és a BASIC , támogatja a numerikus címkéket. A címkéket arra is használják, hogy azonosítsák a belépési pontokat egy összeállított utasítássorozatba (pl . Hibakeresés során ). GOTOJMPMOV

C

A C címke azonosítja egy nyilatkozatot a kódot. Egy utasításnak több címkéje lehet. A címkék csak a kódban jelzik a helyeket, és a címke elérése nincs hatással a tényleges végrehajtásra.

Funkciócímkék

A funkciócímkék azonosítóból állnak, amelyet kettőspont követ. Minden ilyen címke egy függvény utasítására mutat, és azonosítójának egyedinek kell lennie a függvényen belül. Más funkciók ugyanazt a nevet használhatják a címkéhez. A címkeazonosítók elfoglalják saját névterüket - változók és függvények lehetnek ugyanazzal a névvel, mint egy címke.

void foo(int number)
{
    if (number < 0)
        goto error;
    bar(number);
    return;
error:
    fprintf(stderr, "Invalid number!\n");
}

Itt a hiba a címke. A goto utasítással átugorhat egy kódolt címkézett utasításra. A után a goto program végrehajtása a címke utáni utasítással folytatódik.

Váltás címkék

Kétféle címke helyezhető el egy switch utasításban. Az eset címke a kulcsszóból áll case , amelyet egy kifejezés követ, amely egész konstansra értékel. Az alapértelmezett címke a kulcsszóból áll default . A kis- és nagybetűk címkékkel egész számot társíthatunk egy utasításhoz a kódban. A kapcsoló utasítás elérésekor a program végrehajtása a case címke utáni utasítással folytatódik azzal az értékkel, amely megegyezik a kapcsoló zárójelében lévő értékkel. Ha nincs ilyen eset címke, de van alapértelmezett címke, akkor a program végrehajtása az alapértelmezett címke után folytatódik. Ha nincs alapértelmezett címke, akkor a program végrehajtása a váltás után is folytatódik.

switch (die)
{
default:
    printf("invalid\n");
    break;

case 1:
case 3:
case 5:
    printf("odd\n");
    break;

case 2:
case 4:
case 6:
    printf("even\n");
    break;
}

Egy kapcsoló utasításon belül az egyes esetek címkéihez társított egész konstansnak egyedinek kell lennie. Lehet vagy nem alapértelmezett utasítás. A kapcsolókon belül nincs korlátozás a címkék sorrendjére. Az a követelmény, hogy a case címkék értékei egész állandókká legyenek értékelve, több lehetőséget kínál a fordítónak az optimalizálásra.

Példák

Javascript

A JavaScript nyelvben a szintaxisban az utasítások előtt szerepelhet a címke:

top: //Label the outermost for-loop.
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;
        }
    }
}

alert("i=" + i + ", j=" + j); //i=2, j=3

Az utasítás is használható break a kódblokkok kitörésére:

top: {
  console.log("foo")
  console.log("bar")
  break top
  console.log("baz")

}
// Which would output: 
// > foo
// > bar

Közös Lisp

A Common Lisp-ben a címkék meghatározásának két módja létezik. Az első a tagbody speciális operátort foglalja magában . Megkülönböztetve használatát számos más, a globális navigációt lehetővé tevő programozási nyelvtől, például a C-től , a címkék csak ezen operátorral érhetők el. A tagbody címkék belsejében a szimbólummal kezdődő űrlapok vannak meghatározva; a go speciális nyomtatvány lehetővé teszi az ellenőrzés átadását e címkék között.

(let ((iteration NIL))
  (tagbody
    start
      (print 'started)
      (setf  iteration 0)
    increase
      (print iteration)
      (incf  iteration 1)
      (go    check)
    check
      (if (>= iteration 10)
        (go end)
        (go increase))
    end
      (print 'done)))

Egy második módszernél az olvasó makrók és , a korábbi amelynek címkék a tárgy közvetlenül követő, az utóbbi utal annak értékeltük értékét. Ebben az értelemben a címkék inkább alternatívát jelentenek a változókkal, a „változó” deklarálásával és inicializálásával, valamint hozzáféréssel. Az n helyőrző kijelöli a címkét azonosító választatlan, előjel nélküli tizedes egész számot. #n=#n##n=#n#

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

Ettől eltekintve egyes nyomtatványok lehetővé teszik vagy felhatalmazzák a címke deklarálását későbbi hivatkozás céljából, beleértve a névadást block előíró speciális nyomtatványt és a záradékkal loop azonosítható makrót named . Azonnali eltérés a megnevezett formától a return-from speciális operátor használatával lehetséges .

(block myblock
  (loop for iteration from 0 do
    (if (>= iteration 10)
      (return-from myblock 'done)
      (print iteration))))
(loop
  named myloop
  for   iteration from 0
  do    (if (>= iteration 10)
          (return-from myloop 'done)
          (print iteration)))

A hasonló módon C, a makrók case , ccase , ecase , typecase , ctypecase és etypecase meghatározza kapcsoló nyilatkozatokat.

(let ((my-value 5))
  (case my-value
    (1         (print "one"))
    (2         (print "two"))
    ((3 4 5)   (print "three four or five"))
    (otherwise (print "any other value"))))
(let ((my-value 5))
  (typecase my-value
    (list      (print "a list"))
    (string    (print "a string"))
    (number    (print "a number"))
    (otherwise (print "any other type"))))

Lásd még

Hivatkozások