В вычислениях номер строки - это метод, используемый для указания определенной последовательности символов в текстовом файле . Наиболее распространенный метод присвоения номеров строкам - присвоить каждой строке уникальный номер, начиная с 1 для первой строки и увеличивая на 1 для каждой последующей строки.
В языке программирования C номер строки в строке исходного кода - это на единицу большее количество символов новой строки, прочитанных или введенных до этого момента. [1]
Программисты также могли назначать номера строк операторам на более старых языках программирования , таких как Fortran , JOSS и BASIC . В Фортране не каждому оператору нужен номер строки, и номера строк не обязательно должны быть в последовательном порядке. Номера строк предназначены для ветвления и для справки с помощью операторов форматирования.
И Джосс, и БЕЙСИК сделали номера строк обязательным элементом синтаксиса . Основная причина этого заключалась в том, что в то время в большинстве операционных систем отсутствовали интерактивные текстовые редакторы ; поскольку интерфейс программиста обычно ограничивался редактором строк, номера строк обеспечивали механизм, с помощью которого можно было ссылаться на определенные строки исходного кода для редактирования и с помощью которого программист мог вставить новую строку в определенной точке. Номера строк также обеспечивают удобное средство различения кода, вводимого в программу, и команд прямого режима, которые должны выполняться немедленно при вводе пользователем (которые не имеют номеров строк).
Во многом из-за преобладания интерактивного редактирования текста в современных операционных системах номера строк не являются особенностью большинства языков программирования, даже современных Fortran и Basic. [2]
История
FORTRAN
В Фортране , как впервые было указано в 1956 году, номера строк использовались для определения шаблонов ввода / вывода, для указания повторяющихся операторов и для условного ветвления. Например: [3]
ИЗМЕРЕНИЕ АЛЬФА ( 25 ), RHO ( 25 ) 1 ) Формат ( 5 F12 . 4 ) 2 ) ЧТЕНИЕ 1 , АЛЬФА , RHO , ARG СУММА = 0.0 DO 3 I = 1 , 25 ПЧ ( ARG - АЛЬФА ( я )) 4 , 3 , 3 3 ) SUM = SUM + ALPHA ( I ) 4 ) VALUE = 3,14159 * RHO ( I - 1 ) PRINT 1 , ARG , SUM , VALUE ПЕРЕЙДИТЕ К 2
Как и язык ассемблера до него, Фортран не предполагал, что каждой строке нужна метка (в данном случае номер строки). Номер строки требовался только для утверждений, на которые есть ссылки в другом месте:
- Строка 1 определяет шаблон формата для ввода; и
READ
команда в строке 2, и последующаяPRINT
команда ссылаются на эту строку. - В
DO
выполнении цикла строка 3. - Оператор арифметического IF разветвляется на строку 4 при отрицательном значении, на строку 3 при нулевом значении и снова на строку 3 при положительном значении.
Хотя в этом примере номера строк являются последовательными, в самой первой опубликованной «полной, но простой [Fortran] программе» номера строк находятся в последовательности 1, 5, 30, 10, 20, 2. [4]
Номера строк также могут быть присвоены переменным с фиксированной точкой (например, ASSIGN
i TO
n ) для ссылки в последующих назначенных операторах GO TO (например, GO TO
n, (n1, n2, ... nm) ).
КОБОЛ
В COBOL номера строк указывались в первых шести символах (область порядковых номеров ) перфокарт . Первоначально это использовалось для облегчения механической сортировки карт, чтобы гарантировать заданную последовательность программного кода после ручной обработки. Номера строк фактически игнорировались компилятором.
НАРКОТИК
В 1962 году DOPE (Dartmouth Oversimplified Programming Experiment) стал одним из первых языков программирования, которые требовали номер строки для каждого оператора и использовали последовательный порядок номеров строк. Номера строк были указаны как места назначения для двух команд: C (операция сравнения, арифметическое IF) и T (операция, переход к пункту).
JOSS
В 1963 году JOSS независимо сделал номера строк обязательными для каждого оператора в программе и упорядочил строки в последовательном порядке. JOSS представил идею единого редактора командной строки, который работал и как интерактивный язык, и как редактор программ. Команды, набранные без номера строки, выполнялись немедленно, в том, что JOSS называл «прямым режимом». Если к той же строке добавлялся номер строки, она вместо этого копировалась в область хранения программного кода, которую JOSS назвал «косвенным режимом».
В отличие от FORTRAN до него или BASIC после него, JOSS требовал, чтобы номера строк были числами с фиксированной точкой, состоящими из пары двузначных целых чисел, разделенных точкой (например, 1.1). Часть номера строки слева от точки называется «страницей» или «частью», а часть справа называется «линией»; например, номер строки 10.12
относится к странице 10, строке 12. Ветви могут быть нацелены либо на страницу, либо на строку внутри страницы. Когда используется более поздний формат, объединенная страница и строка известны как «шаг».
Страницы используются для определения подпрограмм , которые возвращаются, когда следующая строка находится на другой странице. Например, если подпрограмма для вычисления квадратного корня из числа находится на странице 3, у вас может быть три строки кода 3.1, 3.2 и 3.3, и она будет вызываться с использованием Do part 3.
кода. доходит до следующей строки на другой странице, например, 4.1. Нет необходимости в эквиваленте a RETURN
в конце, хотя, если требуется досрочный возврат, он Done
выполняет это. Пример:
* Процедура запроса у пользователя положительного значения и повторения, пока оно не будет получено.01.10 Запрос X как «Введите положительное значение больше нуля».01.20 Готово, если X> 0.01.30 К шагу 1.1
БАЗОВЫЙ
Представленный в 1964 году, Dartmouth BASIC принял обязательные номера строк, как в JOSS, но сделал их целыми числами, как в FORTRAN. Как определено изначально, BASIC использовал только номера строк для GOTO
и GOSUB
(перейдите к подпрограмме, затем вернитесь). Некоторые Мельчайшие BASIC реализации поддерживаются числовые выражения вместо констант, а утверждения переключателя присутствовали в различных диалектах ( ON
GOTO
; ON
GOSUB
; ON ERROR GOTO
).
Номера строк редко использовались где-либо еще. Одно исключение заключалось в том, что указатель, используемый READ
(который проходил по DATA
операторам), мог быть установлен на определенный номер строки с помощью RESTORE
.
1 REM ВОССТАНОВЛЕНИЕ МОГ БЫТЬ ИСПОЛЬЗОВАНЫ ПРИ ОСНОВНЫЕ недоставало СТРОКА МАССИВЫ 2 DIM М $ ( 9 ) : REM ОПРЕДЕЛИТЬ ДЛИНА ОТ 9 СИМВОЛОВ 5 ВВОД «? МЕСЯЦ #» ; M: ЕСЛИ M < 1 ИЛИ M > 12 ТО 5 7 ВОССТАНОВИТЬ 10 * M: ПРОЧИТАТЬ M $ : ПЕЧАТЬ M $ 10 ДАННЫХ «ЯНВАРЬ» 20 ДАННЫХ «ФЕВРАЛЬ» 30 ДАННЫХ «МАРТ» ...
В первых выпусках Dartmouth BASIC за ним THEN
мог следовать только номер строки (для подразумеваемого GOTO ), а не - как в более поздних реализациях - оператор.
Диапазон допустимых номеров строк широко варьировался от реализации к реализации в зависимости от представления, используемого для хранения двоичного эквивалента номера строки (один или два байта; со знаком или без знака). В то время как Dartmouth BASIC поддерживал от 1 до 99999, типичная реализация микрокомпьютера поддерживала от 1 до 32767 (16-битное слово со знаком).
Диапазон | Диалект |
---|---|
От 1 до 254 | MINOL |
От 1 до 255 | Tiny BASIC Design Note |
От 2 до 255 | Денвер Tiny BASIC |
От 0 до 999 | UIUC BASIC |
1 к 2045 г. | DEC BASIC-8 |
От 0 до 32767 | LLL BASIC, NIBL |
1 к 32767 | Apple I BASIC , Уровень I BASIC , Palo Alto Tiny BASIC |
1 до 65535 | Altair 4K BASIC , MICRO BASIC 1.3, 6800 Tiny BASIC, Tiny BASIC Extended |
1 до 99999 | Дартмутский ОСНОВНОЙ |
1 до 999999 | СКЕЛБАЛ |
Номера строк и стиль
Это было вопросом стиля программирования , если не прямой необходимости, в этих языках оставлять промежутки между последовательными номерами строк, т. Е. Программист использовал бы последовательность (10, 20, 30, ...), а не (1, 2, 3, ...). Это позволяло программисту вставить строку кода позже. Например, если строка кода между строками 20 и 30 была пропущена, программист мог бы вставить забытую строку в строку номер 25. Если в нумерации не осталось пробелов, программисту потребуется изменить нумерацию строки 3 и всех последующих. строк, чтобы вставить новую строку после строки 2. Конечно, если программисту нужно было вставить более девяти дополнительных строк, перенумерация потребовалась бы даже при более разреженной нумерации. Однако это изменение нумерации будет ограничено изменением нумерации только одной строки на десять добавленных строк; когда программист обнаруживает, что ему нужно добавить строку между 29 и 30, нужно будет перенумеровать только строку 30, а строку 40 можно оставить без изменений.
Некоторые BASIC имели команду RENUM , которая обычно проходила через программу (или определенную ее часть), переназначая номера строк с равными приращениями. Это также изменит нумерацию всех ссылок на эти номера строк, чтобы они продолжали работать должным образом.
В большой программе, содержащей подпрограммы , каждая подпрограмма обычно начинается с номера строки, достаточно большого, чтобы оставить место для расширения основной программы (и предыдущих подпрограмм). Например, подпрограммы могут начинаться со строк 10000, 20000, 30000 и т. Д.
Номера строк и GOTO
В «неструктурированных» языках программирования, таких как BASIC , номера строк использовались для указания целей операторов ветвления . Например:
1 S = 0 : N = -1 2 ВВОД «ВВЕДИТЕ НОМЕР ДЛЯ ДОБАВЛЕНИЯ ИЛИ 0 В КОНЕЦ» ; I 3 S = S + I: N = N + 1 : ЕСЛИ I <> 0 ТО НАХОДИТСЯ 2 4 ПЕЧАТЬ «СУММ =» ; S: ПЕЧАТЬ «СРЕДНИЙ =» ; S / N
Ветвление в стиле GOTO может привести к разработке спагетти-кода . (См. Считается вредным , Структурированное программирование .) Даже в некоторых более поздних версиях BASIC, которые все еще требовали номеров строк, использование GOTO с управляемым номером строки было постепенно прекращено, когда это было возможно, в пользу более чистых конструкций, таких как цикл for и while .
Многие современные языки (включая C и C ++ ) включают версию оператора GOTO; однако в этих языках цель GOTO определяется меткой строки вместо номера строки.
Номера строк и синтаксические ошибки
Если программист вводит синтаксическую ошибку в программу, компилятор (или интерпретатор ) сообщит программисту, что попытка компиляции (или выполнения) не удалась на данном номере строки. Это значительно упрощает работу программиста по поиску ошибки.
Использование номеров строк для описания местоположения ошибок остается стандартом в современных инструментах программирования, хотя номера строк никогда не требуется указывать вручную. Программа может легко подсчитать новые строки в исходном файле и отобразить автоматически сгенерированный номер строки в качестве местоположения ошибки. В IDE, таких как Microsoft Visual Studio , Eclipse или Xcode , в которых компилятор обычно интегрирован с текстовым редактором, программист может даже дважды щелкнуть ошибку и перейти непосредственно к строке, содержащей эту ошибку.
Смотрите также
- Метка линии
- Листинг (компьютер)
Рекомендации
- ^ «6.10.4 Контроль линии» . 2008-01-30 . Проверено 3 июля 2008 . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Различия между GW-BASIC и QBasic» . 2003-05-12 . Проверено 28 июня 2008 . CS1 maint: обескураженный параметр ( ссылка )
- ^ Отдел исследований в области программирования, Международная корпорация бизнес-машин (8 апреля 1957 г.). Система автоматического кодирования FORTRAN для IBM 704 EDPM: предварительное руководство оператора (PDF) . С. 6–37.
- ^ Отдел прикладных наук и отдел исследований в области программирования, Международная корпорация бизнес-машин (15 октября 1956 г.). Система автоматического кодирования FORTRAN для IBM 704 EDPM: Справочное руководство программиста (PDF) . п. 46.