Этикетка (информатика) - Label (computer science)

А метка в язык программирования представляет собой последовательность символов, которая определяет местоположение в исходный код. На большинстве языков метки имеют форму идентификатор, часто сопровождаемый знак препинания (например, двоеточие ). Во многих языки программирования высокого уровня цель лейбла - действовать как место назначения ПЕРЕЙТИ К заявление.[1][2] В язык ассемблера метки могут использоваться везде, где может быть адрес (например, как операнд JMP или MOV инструкция).[3] Также в Паскаль и его производные вариации. Некоторые языки, например Фортран и БАЗОВЫЙ, поддержка числовых меток.[4] Ярлыки также используются для обозначения точки входа в составлен последовательность утверждений (например, во время отладка ).

C

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

Метки функций

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

пустота фу(int количество){    если (количество < 0)        перейти к ошибка;    бар(количество);    вернуть;ошибка:    fprintf(stderr, "Неправильный номер! п");}

Вот ошибка это метка. Заявление перейти к можно использовать для перехода к помеченному оператору в коде. После перейти к, выполнение программы продолжается с оператора после метки.

Ярлыки переключателей

В оператор switch можно поместить два типа меток. Ярлык случая состоит из ключевого слова кейс, за которым следует выражение, которое вычисляется как целочисленная константа. Метка по умолчанию состоит из ключевого слова по умолчанию. Метки регистра используются для связывания целочисленного значения с оператором в коде. Когда достигается оператор switch, выполнение программы продолжается с оператора после метки case со значением, которое соответствует значению в скобках переключателя. Если такой метки case нет, но есть метка по умолчанию, выполнение программы продолжается с оператора, следующего за меткой по умолчанию. Если метки по умолчанию нет, выполнение программы продолжается после переключения.

переключатель (умри){по умолчанию:    printf("недействительным п");    перерыв;кейс 1:кейс 3:кейс 5:    printf("странный п");    перерыв;кейс 2:кейс 4:кейс 6:    printf("даже п");    перерыв;}

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

Примеры

Javascript

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

верх: // Обозначение самого внешнего цикла for.для (вар я = 0; я < 4; я++) {    для (вар j = 0; j < 4; j++) {        если (j === 3 && я === 2) {            предупреждение("я =" + я + ", j =" + j); // i = 2, j = 3            перерыв верх;        }    }}предупреждение("я =" + я + ", j =" + j); // i = 2, j = 3

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

верх: {  консоль.журнал("фу")  консоль.журнал("бар")  перерыв верх  консоль.журнал("баз")}// Что выведет: //> foo//> бар

Common Lisp

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

(позволять ((итерация Ноль))  (tagbody    Начните      (Распечатать 'начал)      (setf  итерация 0)    увеличение      (Распечатать итерация)      (incf  итерация 1)      (идти    проверять)    проверять      (если (>= итерация 10)        (идти конец)        (идти увеличение))    конец      (Распечатать 'сделанный)))

Второй метод использует макросы читателя #п= и #п#, первая из которых обозначает объект, следующий сразу за ним, вторая - его оцененное значение.[6] Ярлыки в этом смысле представляют собой скорее альтернативу переменным, при этом #п= объявление и инициализация «переменной» и #п# доступ к нему. Заполнитель п обозначает выбранное десятичное целое число без знака, идентифицирующее метку.

(прогноз  #1="Здравствуйте"  (Распечатать #1#))

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

(блокировать мой блок  (петля для итерация от 0 делать    (если (>= итерация 10)      (возврат из мой блок 'сделанный)      (Распечатать итерация))))
(петля  названный Myloop  для   итерация от 0  делать    (если (>= итерация 10)          (возврат из Myloop 'сделанный)          (Распечатать итерация)))

Подобно C, макросы кейс, ccase, уговаривать,[7] тип, ctypecase и типаз определить операторы переключения.[8]

(позволять ((моя ценность 5))  (кейс моя ценность    (1         (Распечатать "один"))    (2         (Распечатать "два"))    ((3 4 5)   (Распечатать "три четыре или пять"))    (в противном случае (Распечатать "любое другое значение"))))
(позволять ((моя ценность 5))  (тип моя ценность    (список      (Распечатать "список"))    (строка    (Распечатать "строка"))    (количество    (Распечатать "число"))    (в противном случае (Распечатать "любой другой тип"))))

Смотрите также

использованная литература

  1. ^ C Стандартный раздел 6.8.6.1 Оператор goto
  2. ^ "GOTO Statement QuickSCREEN". Microsoft. 1988 г.. Получено 2008-07-03.
  3. ^ О. Лоулор. "Сборка nasm x86". Получено 2008-07-03.
  4. ^ «Различия между GW-BASIC и QBasic».
  5. ^ Кент Питман. "CLHS: TAGBODY специального оператора". Получено 2020-08-18.
  6. ^ Кент Питман. «CLHS: Раздел 2.4.8». Получено 2020-08-18.
  7. ^ Кент Питман. "CLHS: Macro CASE, CCASE, ECASE". Получено 2020-08-20.
  8. ^ Кент Питман. «CLSH: макрос TYPECASE, CTYPECASE, ETYPECASE». Получено 2020-08-20.