Jump to content

Этикетка (информатика)

(Перенаправлено с Label (язык программирования) )

В языках программирования метка представляет собой последовательность символов, которая идентифицирует местоположение в исходном коде . В большинстве языков метки имеют форму идентификатора , за которым часто следует знак пунктуации (например, двоеточие ). Во многих языках высокого уровня цель метки — выступать в качестве пункта назначения. GOTO заявление. [1] [2] На языке ассемблера метки могут использоваться везде, где может быть адрес (например, в качестве операнда JMP или MOV инструкция). [3] Также в Паскале и его производных вариациях. Некоторые языки, такие как Fortran и BASIC , поддерживают числовые метки. [4] Метки также используются для идентификации точки входа в скомпилированную последовательность операторов (например, во время отладки ).

С [ править ]

В C метка идентифицирует оператор в коде. Один оператор может иметь несколько меток. Метки просто указывают места в коде, и достижение метки не влияет на фактическое выполнение.

Метки функций [ править ]

Метки функций состоят из идентификатора, за которым следует двоеточие. Каждая такая метка указывает на оператор функции, и ее идентификатор должен быть уникальным внутри этой функции. Другие функции могут использовать то же имя для метки. Идентификаторы меток занимают собственное пространство имен — можно иметь переменные и функции с тем же именем, что и метка.

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

Здесь ошибка — это метка. Оператор goto можно использовать для перехода к помеченному оператору в коде. После 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;
}

В одном операторе переключения целочисленная константа, связанная с каждой меткой варианта, должна быть уникальной. Оператор по умолчанию может быть, а может и не быть. Нет ограничений на порядок меток внутри переключателя. Требование, чтобы значения меток регистра оценивались как целочисленные константы, дает компилятору больше возможностей для оптимизации.

Примеры [ править ]

Javascript [ править ]

В языке JavaScript синтаксическим операторам может предшествовать метка:

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

Также возможно использовать break оператор для выхода из блоков кода:

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

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

Общий Лисп [ править ]

В Common Lisp существует два способа определения меток. Первый из них предполагает tagbody специальный оператор. В отличие от многих других языков программирования, допускающих глобальную навигацию, таких как C , метки доступны только в контексте этого оператора. Внутри tagbody метки определяются как формы, начинающиеся с символа; тот go специальная форма позволяет передавать управление между этими метками. [5]

(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#, первый из которых помечает объект, следующий сразу за ним, второй относится к его вычисленному значению. [6] Метки в этом смысле представляют собой скорее альтернативу переменным, поскольку #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)))

Подобно C, макросы case, ccase, ecase, [7] typecase, ctypecase и etypecase определить операторы переключения. [8]

(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 6.8.6.1 Оператор goto» . Архивировано из оригинала 24 декабря 2007 г. Проверено 3 июля 2008 г.
  2. ^ «Перейти к оператору QuickSCREEN» . Майкрософт. 1988. Архивировано из оригинала 25 июля 2009 г. Проверено 3 июля 2008 г.
  3. ^ О. Лоулор. «Сборка nasm x86» . Проверено 3 июля 2008 г.
  4. ^ «Различия между GW-BASIC и QBasic» . Архивировано из оригинала 10 февраля 2010 г.
  5. ^ Кент Питман. «CLHS: Специальный оператор ТЭГБОДИ» . Проверено 18 августа 2020 г.
  6. ^ Кент Питман. «CLHS: Раздел 2.4.8» . Проверено 18 августа 2020 г.
  7. ^ Кент Питман. «CLHS: Макрос CASE, CCASE, ECASE» . Проверено 20 августа 2020 г.
  8. ^ Кент Питман. «CLSH: Макрос TYPECASE, CTYPECASE, ETYPECASE» . Проверено 20 августа 2020 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9fe074f6099c69ba778ee9ef37835e6f__1715617560
URL1:https://arc.ask3.ru/arc/aa/9f/6f/9fe074f6099c69ba778ee9ef37835e6f.html
Заголовок, (Title) документа по адресу, URL1:
Label (computer science) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)