लेबल (कंप्यूटर विज्ञान)

From Vigyanwiki
Revision as of 16:27, 14 June 2023 by alpha>Indicwiki (Created page with "{{short description|Sequence of characters that identifies a location within source code}} प्रोग्रामिंग भाषाओं में, एक ल...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

प्रोग्रामिंग भाषाओं में, एक लेबल वर्णों का एक क्रम होता है जो स्रोत कोड के भीतर एक स्थान की पहचान करता है। अधिकांश भाषाओं में, लेबल एक पहचानकर्ता (कंप्यूटर भाषा) का रूप लेते हैं, जिसके बाद अक्सर एक विराम चिह्न (जैसे, एक कोलन (विराम चिह्न)) होता है। कई उच्च स्तरीय प्रोग्रामिंग भाषाओं|उच्च स्तरीय भाषाओं में, एक लेबल का उद्देश्य एक के गंतव्य के रूप में कार्य करना है GOTO कथन।[1][2] सभा की भाषा में, लेबल का उपयोग कहीं भी किया जा सकता है, एक स्मृति पता (उदाहरण के लिए, एक के ऑपरेंड के रूप में JMP या MOV निर्देश)।[3] पास्कल (प्रोग्रामिंग भाषा) और इसकी व्युत्पन्न विविधताओं में भी। कुछ भाषाएँ, जैसे फोरट्रान और बुनियादी , संख्यात्मक लेबल का समर्थन करती हैं।[4] लेबल का उपयोग बयानों के संकलक अनुक्रम में प्रवेश बिंदु की पहचान करने के लिए भी किया जाता है (उदाहरण के लिए, डिबगिंग के दौरान)।

सी

C (प्रोग्रामिंग लैंग्वेज) में एक लेबल कोड में एक स्टेटमेंट की पहचान करता है। एक ही बयान में कई लेबल हो सकते हैं। लेबल केवल कोड में स्थान इंगित करते हैं और लेबल तक पहुंचने का वास्तविक निष्पादन पर कोई प्रभाव नहीं पड़ता है।

फ़ंक्शन लेबल

फ़ंक्शन लेबल में एक पहचानकर्ता होता है, जिसके बाद एक कोलन होता है। ऐसा प्रत्येक लेबल किसी फ़ंक्शन में एक कथन को इंगित करता है और उसके पहचानकर्ता को उस फ़ंक्शन के भीतर अद्वितीय होना चाहिए। अन्य फ़ंक्शन लेबल के लिए उसी नाम का उपयोग कर सकते हैं। लेबल पहचानकर्ता अपने स्वयं के नामस्थान पर कब्जा कर लेते हैं - एक लेबल के समान नाम के साथ चर (कंप्यूटर विज्ञान) और सबरूटीन हो सकता है।

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

यहाँ त्रुटि लेबल है। स्टेटमेंट के लिए जाओ का उपयोग कोड में लेबल किए गए स्टेटमेंट पर जाने के लिए किया जा सकता है। बाद एक goto, प्रोग्राम निष्पादन लेबल के बाद कथन के साथ जारी रहता है।

स्विच लेबल

स्विच स्टेटमेंट में दो तरह के लेबल लगाए जा सकते हैं। एक केस लेबल में कीवर्ड होता है case, उसके बाद एक व्यंजक जो पूर्णांक स्थिरांक का मूल्यांकन करता है। एक डिफ़ॉल्ट लेबल में कीवर्ड होता है default. कोड में किसी कथन के साथ पूर्णांक मान को संबद्ध करने के लिए केस लेबल का उपयोग किया जाता है। जब एक स्विच स्टेटमेंट पहुंच जाता है, तो केस लेबल के बाद स्टेटमेंट के साथ प्रोग्राम का निष्पादन जारी रहता है, जो स्विच के कोष्ठक में मान से मेल खाता है। यदि ऐसा कोई केस लेबल नहीं है, लेकिन एक डिफ़ॉल्ट लेबल है, तो डिफ़ॉल्ट लेबल के बाद स्टेटमेंट के साथ प्रोग्राम का निष्पादन जारी रहता है। यदि कोई डिफ़ॉल्ट लेबल नहीं है, तो स्विच के बाद प्रोग्राम का निष्पादन जारी रहता है।

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;
}

एकल स्विच स्टेटमेंट के भीतर, प्रत्येक केस लेबल से जुड़ा पूर्णांक स्थिरांक अद्वितीय होना चाहिए। डिफॉल्ट स्टेटमेंट हो भी सकता है और नहीं भी। स्विच में लेबल के क्रम पर कोई प्रतिबंध नहीं है। आवश्यकता है कि केस लेबल मान पूर्णांक स्थिरांक का मूल्यांकन करते हैं, संकलक को अनुकूलन के लिए अधिक जगह देता है।

उदाहरण

जावास्क्रिप्ट

जावास्क्रिप्ट भाषा में जावास्क्रिप्ट सिंटैक्स स्टेटमेंट लेबल से पहले हो सकते हैं:

शीर्ष: // सबसे बाहरी फॉर-लूप को लेबल करें।
के लिए (var i = 0; i <4; i++) {
    के लिए (var j = 0; j <4; j++) {
        अगर (जे

== [[सामान्य लिस्प]] ==

सामान्य लिस्प में लेबल परिभाषित करने के दो तरीके मौजूद हैं। पहले में शामिल है <code>tagbody</code> विशेष संचालिका। वैश्विक नेविगेशन की अनुमति देने वाली कई अन्य प्रोग्रामिंग भाषाओं से इसके उपयोग को अलग करते हुए, जैसे सी (प्रोग्रामिंग भाषा), लेबल केवल इस ऑपरेटर के संदर्भ में ही पहुंच योग्य हैं। ए के अंदर <code>tagbody</code> लेबल को एक प्रतीक से शुरू होने वाले रूपों के रूप में परिभाषित किया गया है; <code>go</code> विशेष प्रपत्र इन लेबलों के बीच नियंत्रण के हस्तांतरण की अनुमति देता है।<ref>{{cite web|url=http://www.lispworks.com/documentation/HyperSpec/Body/s_tagbod.htm|title=CLHS: Special Operator TAGBODY|date=|accessdate=2020-08-18|author=Kent Pitman}}</ref>

<syntaxhighlight lang="lisp">
(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)))

एक दूसरी विधि पाठक मैक्रोज़ का उपयोग करती है #n= और #n#, जिनमें से पूर्व वस्तु को उसके तुरंत बाद लेबल करता है, बाद वाला उसके मूल्यांकित मूल्य को संदर्भित करता है।[5] इस अर्थ में लेबल चर के बजाय एक विकल्प का गठन करते हैं #n= एक "वैरिएबल" घोषित करना और आरंभ करना और #n# इसे एक्सेस करना। प्लेसहोल्डर n लेबल की पहचान करने वाले चुने हुए अहस्ताक्षरित दशमलव पूर्णांक को निर्दिष्ट करता है।

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

इसके अलावा, कुछ फॉर्म विशेष फॉर्म सहित, बाद के रेफ़रल के लिए एक लेबल की घोषणा की अनुमति देते हैं या अनिवार्य करते हैं block जो एक नामकरण निर्धारित करता है, और loop मैक्रो जिसे ए द्वारा पहचाना जा सकता है named खंड। के उपयोग से नामित फॉर्म से तत्काल प्रस्थान संभव है return-from विशेष संचालिका।

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

सी के समान फैशन में, मैक्रोज़ case, ccase, ecase,[6] typecase, ctypecase और etypecase स्विच स्टेटमेंट परिभाषित करें।[7]

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


यह भी देखें

संदर्भ

  1. "C Standard section 6.8.6.1 The goto statement". Archived from the original on 2007-12-24. Retrieved 2008-07-03.
  2. "गोटो स्टेटमेंट क्विकस्क्रीन". Microsoft. 1988. Archived from the original on 2009-07-25. Retrieved 2008-07-03.
  3. O. Lawlor. "nasm x86 Assembly". Retrieved 2008-07-03.
  4. "GW-बेसिक और QBasic के बीच अंतर". Archived from the original on 2010-02-10.
  5. Kent Pitman. "CLHS: Section 2.4.8". Retrieved 2020-08-18.
  6. Kent Pitman. "CLHS: Macro CASE, CCASE, ECASE". Retrieved 2020-08-20.
  7. Kent Pitman. "CLSH: Macro TYPECASE, CTYPECASE, ETYPECASE". Retrieved 2020-08-20.