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"))))