Программное обеспечение СМ ЭВМ.
Ниже представлено руководство оператора по работе на языке C. Описаны процедуры, необходимые для запуска компилятора, ключи командной строки. Описаны также процедура компоновки, использование библиотек и запуск скомпонованной программы, средства отладки сообщения оператору.
1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ
ОПИСЫВАЕМЫЙ ПРОГРАММНЫЙ КОМПЛЕКС ОБЕСПЕЧИВАЕТ КОМПИЛЯЦИЮ,
КОМПОНОВКУ, ИСПОЛНЕНИЕ И ОТЛАДКУ ПРОГРАММ, НАПИСАННЫХ НА ЯЗЫКЕ
ПРОФЕССИОНАЛЬНОГО ПРОГРАММИРОВАНИЯ "СИ" ПОД УПРАВЛЕНИЕМ
ОПЕРАЦИОННОЙ СИСТЕМЫ РАФОС.
КОМПИЛЯТОР ЯЗЫКА "СИ" (ИСПОЛЬЗУЕМЫЙ КОМПИЛЯТОРОМ АССЕМБЛЕР
AS МЫ СЧИТАЕМ ВХОДЯЩИМ В КОМПИЛЯТОР) МОЖЕТ ФУНКЦИОНИРОВАТЬ ПОД
УПРАВЛЕНИЕМ ВСЕХ МОНИТОРОВ ОС РАФОС-II. ДЛЯ РАБОТЫ С
ПРОГРАММНЫМ КОМПЛЕКСОМ НА ЭВМ, РАБОТАЮЩЕЙ ПОД УПРАВЛЕНИЕМ
ОДНОГО ИЗ МОНИТОРОВ ОС РАФОС-II, НЕОБХОДИМО НЕ МЕНЕЕ 41 КБАЙТ
ОПЕРАТИВНОЙ ПАМЯТИ И ОКОЛО 610 БЛОКОВ ДИСКОВОГО ПРОСТРАНСТВА
ДЛЯ РАЗМЕЩЕНИЯ ЗАГРУЗОЧНЫХ ФАЙЛОВ КОМПИЛЯТОРА, СТАНДАРТНЫХ
ФАЙЛОВ ОПИСАНИЙ И ОБ'ЕКТНЫХ ФАЙЛОВ БИБЛИОТЕК (СМ. ПРИЛОЖЕНИЕ
3).
НЕОБХОДИМО ОТМЕТИТЬ, ЧТО ПРОГРАММЫ, ПОЛУЧЕННЫЕ ПРИ ПОМОЩИ
ДАННОГО ПРОГРАММНОГО КОМПЛЕКСА, МОГУТ ВЫПОЛНЯТЬСЯ ПОД
УПРАВЛЕНИЕМ ЛЮБОГО ИЗ МОНИТОРОВ ОС РАФОС И РАФОС-II, А ПРИ
ИСПОЛЬЗОВАНИИ БИБЛИОТЕКИ АВТОНОМНОЙ ПОДДЕРЖКИ И АВТОНОМНО, НА
ЭВМ БЕЗ ОПЕРАЦИОННОЙ СИСТЕМЫ.
- 3 -
2. РАБОТА С КОМПИЛЯТОРОМ
ДЛЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ, НАПИСАННОЙ НА ЯЗЫКЕ "СИ", ПОД
УПРАВЛЕНИЕМ МОНИТОРА ОС РАФОС НЕОБХОДИМО ВЫПОЛНИТЬ КОМПИЛЯЦИЮ,
КОМПОНОВКУ И ЗАПУСК ПРОГРАММЫ (СЧИТАЕТСЯ, ЧТО ТЕКСТ ПРОГРАММЫ
УЖЕ ПОДГОТОВЛЕН).
КОМПИЛЯЦИЯ НАЧИНАЕТСЯ С ВЫЗОВА КОМПИЛЯТОРА (CC.SAV) И
ПЕРЕДАЧИ ЕМУ КОМАНДНОЙ СТРОКИ, ОПИСЫВАЮЩЕЙ ВХОДНОЙ ФАЙЛ, И,
ВОЗМОЖНО, ВЫХОДНОЙ ФАЙЛ И КЛЮЧИ, УТОЧНЯЮЩИЕ ДЕЙСТВИЯ,
ТРЕБУЕМЫЕ ОТ КОМПИЛЯТОРА. КОМПИЛЯТОР В ПРОЦЕССЕ РАБОТЫ СОЗДАЕТ
ОБ'ЕКТНЫЕ ФАЙЛЫ, КОТОРЫЕ ПЕРЕД ВЫПОЛНЕНИЕМ ДОЛЖНЫ БЫТЬ
СКОМПОНОВАНЫ С БИБЛИОТЕКАМИ, И, ВОЗМОЖНО, ДРУГИМИ ОБ'ЕКТНЫМИ
ФАЙЛАМИ.
П_Р_И_М_Е_Ч_А_Н_И_Е. БОЛЕЕ СТРОГО ТАК: КОМПИЛЯТОР СОЗДАЕТ
ФАЙЛЫ НА АССЕМБЛЕРЕ (ЯЗЫК ДАННОГО АССЕМБЛЕРА ОТЛИЧАЕТСЯ ОТ
MACRO-11 И ПОХОЖ НА ЯЗЫК АССЕМБЛЕРА ОС "UNIX"). АССЕМБЛЕР
(AS.SAV) ОБРАБАТЫВАЕТ ЭТИ ФАЙЛЫ И СОЗДАЕТ ОБ'ЕКТНЫЕ ФАЙЛЫ В
ФОРМАТЕ ОС РАФОС. АССЕМБЛЕР ЗАПУСКАЕТСЯ ПОСЛЕ КОМПИЛЯТОРА
АВТОМАТИЧЕСКИ (ЕСЛИ В КОМАНДНОЙ СТРОКЕ ЯВНО НЕ УКАЗАНО
ОБРАТНОЕ).
КОМПОНОВКА ВЫПОЛНЯЕТСЯ СИСТЕМНОЙ ПРОГРАММОЙ-КОМПОНОВЩИКОМ
LINK, КОТОРЫЙ ЗАПУСКАЕТСЯ ЧЕРЕЗ КОМАНДУ "LINK" МОНИТОРА ИЛИ
НЕПОСРЕДСТВЕННО. КОМПОНОВЩИК ОБ'ЕДИНЯЕТ ВСЕ ПРОГРАММНЫЕ МОДУЛИ
(ОБ'ЕКТНЫЕ ФАЙЛЫ) И НЕОБХОДИМЫЕ МОДУЛИ ИЗ БИБЛИОТЕК И СОЗДАЕТ
ФАЙЛ В ФОРМАТЕ ЗАРГУЗКИ.
ПОСЛЕ КОМПОНОВКИ ПРОГРАММА МОЖЕТ БЫТЬ ЗАПУЩЕНА КОМАНДАМИ
"RUN" ИЛИ "R" МОНИТОРА.
ЗАПУЩЕННАЯ ПРОГРАММА ОЖИДАЕТ (ЕСЛИ ЭТО ЯВНО НЕ ОТМЕНЕНО)
КОМАНДНУЮ СТРОКУ, ПОСЛЕ ВВОДА КОТОРОЙ ИСПОЛНЯЮЩАЯ СИСТЕМА
ЭМУЛИРУЕТ СТАРТОВЫЕ ДЕЙСТВИЯ ИНТЕРПРЕТАТОРА "SHELL" ОС UNIX,
ВКЛЮЧАЯ ПЕРЕНАПРАВЛЕНИЕ СТАНДАРТНОГО ВВОДА/ВЫВОДА (СМ. НИЖЕ).
2.1. ЗАПУСК КОМПИЛЯТОРА
КОМПИЛЯТОР ЯЗЫКА "СИ" (ФАЙЛ CC.SAV) ЗАПУСКАЕТСЯ КОМАНДОЙ
R CC
ИЛИ
RUN DEV:CC
,ЕСЛИ ФАЙЛ CC.SAV НАХОДИТСЯ НЕ НА УСТРОЙСТВЕ "SY:", А НА
УСТРОЙСТВЕ "DEV:".
ПЕРЕД ЗАПУСКОМ КОМПИЛЯТОРА НЕОБХОДИМО ПРИСВОИТЬ ЛОГИЧЕСКОЕ
ИМЯ "C:" УСТРОЙСТВУ, НА КОТОРОМ РАЗМЕЩЕН АССЕМБЛЕР (AS.SAV) И
СТАНДАРТНЫЕ ФАЙЛЫ ОПИСАНИЙ (ФАЙЛЫ С РАСШИРЕНИЕМ ".H", СМ.
ПРИЛОЖЕНИЕ 1). ПОСЛЕ ЗАПУСКА КОМПИЛЯТОР ВЫВОДИТ ПОДСКАЗКУ "# "
И ОЖИДАЕТ ВВОДА КОМАНДНОЙ СТРОКИ.
- 4 -
2.2. КОМАНДНАЯ СТРОКА
КОМАНДНАЯ СТРОКА ДОЛЖНА ИМЕТЬ ВИД
[-CEFJKLMNPRSTXZ] [-IDEV] [-DSYM[=VAL]] [-USYM] [-O OUTFILE]
INFILE
,ГДЕ КВАДРАТНЫЕ СКОБКИ ОГРАНИЧИВАЮТ, КАК ОБЫЧНО,
НЕОБЯЗАТЕЛЬНЫЕ АРГУМЕНТЫ. ИНАЧЕ ГОВОРЯ, КОМАНДНАЯ СТРОКА
СОСТОИТ ИЗ:
- НЕОБЯЗАТЕЛЬНЫХ КЛЮЧЕЙ БЕЗ ЗНАЧЕНИЙ; СТРОЧКЕ КЛЮЧЕЙ ДОЛЖЕН
ПРЕДШЕСТВОВАТЬ БЕЗ ПРОБЕЛА СИМВОЛ '-'. МОЖЕТ БЫТЬ
НЕСКОЛЬКО СТРОЧЕК КЛЮЧЕЙ.
- НЕОБЯЗАТЕЛЬНЫХ КЛЮЧЕЙ СО ЗНАЧЕНИЯМИ. ЗНАЧЕНИЕ КЛЮЧА
(СТРОЧКА СИМВОЛОВ) ДОЛЖНО СЛЕДОВАТЬ ЗА КЛЮЧОМ БЕЗ
ПРОБЕЛА.
- НЕОБЯЗАТЕЛЬНОГО КЛЮЧА ОПРЕДЕЛЕНИЯ ВЫХОДНОГО ФАЙЛА ('O') И
СПЕЦИФИКАЦИИ ВЫХОДНОГО ФАЙЛА (В СЛЕДУЮЩЕМ АРГУМЕНТЕ).
- ОБЯЗАТЕЛЬНОГО ИМЕНИ ВХОДНОГО ФАЙЛА.
АРГУМЕНТЫ В КОМАНДНОЙ СТРОКЕ РАЗДЕЛЯЮТСЯ ПРОБЕЛАМИ ИЛИ
ТАБУЛЯЦИЯМИ, ПОРЯДОК ЭЛЕМЕНТОВ В КОМАНДНОЙ СТРОКЕ НЕКРИТИЧЕН.
КЛЮЧИ СО ЗНАЧЕНИЯМИ И КЛЮЧ 'O' МОГУТ ВХОДИТЬ В ОБЩУЮ СТРОЧКУ
КЛЮЧЕЙ (КЛЮЧИ СО ЗНАЧЕНИЯМИ - ТОЛЬКО ПОСЛЕДНИМИ).
ИМЯ ВХОДНОГО ФАЙЛА (INFILE) ОЖИДАЕТСЯ В ФОРМАТЕ CSI. ЕСЛИ
ИМЯ УСТРОЙСТВА ОТСУТСТВУЕТ, ПРЕДПОЛАГАЕТСЯ "DK:", ЕСЛИ
ОТСУТСТВУЕТ ТИП ФАЙЛА, ПРЕДПОЛАГАЕТСЯ ".C" ИЛИ ".S" В
ЗАВИСИМОСТИ ОТ ТЕКУЩИХ КЛЮЧЕЙ (ТИП ".S" ПРЕДПОЛАГАЕТСЯ ПРИ
ОДНОВРЕМЕННОМ НАЛИЧИИ КЛЮЧЕЙ 'M' И 'C', СМ. НИЖЕ). В ИМЕНИ
ВХОДНОГО ФАЙЛА МОЖЕТ БЫТЬ УКАЗАНА ДЛИНА. ЭТА ДЛИНА
ИСПОЛЬЗУЕТСЯ ПРИ ОТКРЫТИИ ПРОМЕЖУТОЧНЫХ И ВЫХОДНОГО ФАЙЛОВ,
СМ. "ПРОБЛЕМЫ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ".
ПРИ ЗАДАНИИ В КОМАНДНОЙ СТРОКЕ ТОЛЬКО ИМЕНИ ВХОДНОГО ФАЙЛА
ПРИ ТРАНСЛЯЦИИ БУДУТ ВЫПОЛНЕНЫ СТАДИИ ПРЕПРОЦЕССОРА (CPP),
КОМПИЛЯТОРА (C0, C1) И АССЕМБЛЕРА (AS). ВЫХОДНОЙ ФАЙЛ БУДЕТ
СОЗДАН НА УСТРОЙСТВЕ "DK:" С ИМЕНЕМ ВХОДНОГО ФАЙЛА И ТИПОМ
".OBJ".
ПРИВЕДЕМ ПРИМЕРЫ КОМАНДНЫХ СТРОК:
MYPROG
- ВЫПОЛНИТЬ ТРАНСЛЯЦИЮ ФАЙЛА MYPROG.C В ФАЙЛ MYPROG.OBJ.
-LXTO RK3: BBB
- ВЫПОЛНИТЬ ТРАНСЛЯЦИЮ ФАЙЛА DK:BBB.C В ФАЙЛ RK3:BBB.OBJ С
ОПТИМИЗАЦИЕЙ ('X'), ВЫДАЧЕЙ СТАТИСТИКИ ОПТИМИЗАТОРА ('T')
И СООБЩЕНИЯМИ ОБ ОКОНЧАНИИ ПРОХОДОВ ('L').
-LX BBB -O RK3: -T
- ТО ЖЕ, ЧТО И В ПЕРДЫДУЖЕМ ПРИМЕРЕ, НО С ДРУГИМ
РАСПОЛОЖЕНИЕМ КЛЮЧЕЙ -- ИЛЛЮСТРИРУЕТ ВОЗМОЖНОСТИ
- 5 -
РАСПОЛОЖЕНИЯ КЛЮЧЕЙ В КОМАНДНОЙ СТРОКЕ.
ПРИ ПОМОЩИ КЛЮЧЕЙ МОЖНО УТОЧНИТЬ ДЕЙСТВИЯ, ТРЕБУЕМЫЕ ПРИ
ТРАНСЛЯЦИИ:
- C - ПОДАВЛЯЕТ СТАДИЮ КОМПИЛЯТОРА (ОСТАЮТСЯ СТАДИИ
ПРЕПРОЦЕССОРА И АССЕМБЛЕРА).
- E - ЕСЛИ ЯВНО (В ИМЕНИ ВХОДНОГО ФАЙЛА) НЕ БЫЛА УКАЗАНА
ДЛИНА, ТО ДЛЯ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ (И ДЛЯ ВЫХОДНОГО, ЕСЛИ
ДЛИНА ВЫХОДНОГО ФАЙЛА ЯВНО НЕ УКАЗАНА) ИСПОЛЬЗУЕТСЯ ДЛИНА
"[-1]". СМ. "ПРОБЛЕМЫ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ".
- F - ПРИВОДИТ ВКЛЮЧЕНИЮ (ПРИ КОМПОНОВКЕ) В ЗАГРУЗОЧНЫЙ
МОДУЛЬ ЭМУЛЯТОРА КОМАНД FPU. СМ. "ЭМУЛЯЦИЯ FPU".
- J - ПОДАВЛЯЕТ ВКЛЮЧЕНИЕ ЭМУЛЯТОРА FPU В ЗАГРУЗОЧНЫЙ
МОДУЛЬ. СМ. "ЭМУЛЯЦИЯ FPU".
- K - ПОДАВЛЯЕТ ИНИЦИАЛИЗАЦИЮ ПРОЦЕССОРА ПЛАВАЮЩЕЙ ЗАПЯТОЙ
(FPU). СМ. "ИНИЦИАЛИЗАЦИЯ FPU".
- L - ВКЛЮЧАЕТ ПЕЧАТЬ СООБЩЕНИЙ ОБ ОКОНЧАНИИ КАЖДОЙ СТАДИИ
КОМПИЛЯЦИИ. СООБЩЕНИЯ ИМЕЮТ ВИД "XX COMPLЕTE", ГДЕ XX -
ИМЯ СТАДИИ:
- CPP - СТАДИЯ ПРЕПРОЦЕССОРА
- C0 - ПЕРВЫЙ ПРОХОД СТАДИИ КОМПИЛЯТОРА
- C1 - ВТОРОЙ ПРОХОД СТАДИИ КОМПИЛЯТОРА
- C2 - СТАДИЯ ОПТИМИЗАТОРА
- AS - СТАДИЯ АССЕМБЛЕРА
- M - ПОДАВЛЯЕТ СТАДИЮ ПРЕПРОЦЕССОРА.
- N - ЗАПРЕЩАЕТ СТИРАНИЕ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ.
- P - ПРИВОДИТ К ВКЛЮЧЕНИЮ В ГЕНЕРИРУЕМЫЙ КОД КОМАНД,
ПОЗВОЛЯЮЩИХ ПОЛУЧИТЬ ДОПОЛНИТЕЛЬНУЮ ИНФОРМАЦИЮ О РАБОТЕ
ПРОГРАММ. ЭТО ПОЛЕЗНО ПРИ ОТЛАДКЕ И ОЦЕНКЕ
ПРОИЗВОДИТЕЛЬНОСТИ. СМ. "СРЕДСТВА ОТЛАДКИ".
- R - РАЗРЕШАЕТ РЕКУРСИЮ В ПРЕПРОЦЕССОРЕ.
- S - ПОДАВЛЯЕТ СТАДИЮ АССЕМБЛЕРА.
- T - ВКЛЮЧАЕТ ВЫДАЧУ СТАТИСТИКИ ОПТИМИЗАТОРА (C2). ИМЕЕТ
СМЫСЛ ТОЛЬКО СОВМЕСТНО С КЛЮЧОМ '-X'. СМ. НИЖЕ.
- X - ВКЛЮЧАЕТ СТАДИЮ ОПТИМИЗАТОРА (C2). СМ. "ОПТИМИЗАЦИЯ".
- Z - ПОДАВЛЯЕТ ВКЛЮЧЕНИЕ ФУНКЦИЙ ФОРМАТНОГО ВЫВОДА ЧИСЕЛ С
ПЛАВАЮЩЕЙ ЗАПЯТОЙ В ЗАГРУЗОЧНЫЙ МОДУЛЬ ПРИ КОМПОНОВКЕ СМ.
"ФОРМАТНЫЙ ВЫВОД ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ".
- I ("-IDEV") - ВКЛЮЧАЕТ УСТРОЙСТВО "DEV:" В ЧИСЛО
УСТРОЙСТВ, НА КОТОРЫХ ПРЕПРОЦЕССОР ПРОИЗВОДИТ ПОИСК
ФАЙЛОВ, УКАЗАННЫХ В КАЧЕСТВЕ АРГУМЕНТА ОПЕРАТОРА
- 6 -
"#INCLUDE". ИМЯ УСТРОИСТВА "DEV" НЕ ДОЛЖНО СОДЕРЖАТЬ ':',
НАПРИМЕР "-IRK1". ПРИ ПОИСКЕ ФАЙЛОВ, УКАЗАННЫХ В
"#INCLUDE", ПОСЛЕДОВАТЕЛЬНО ПРОСМАТРИВАЕТ УСТРОЙСТВА ПО
СЛЕДУЮЩЕМУ СПИСКУ:
+----------+
#INCLUDE "FILE" -> ! SR: !
+----------+
! ....... !
! !
! DEV: !
! ЗАДАННЫЕ !
! КЛЮЧАМИ !
! 'I' !
! !
+----------+
#INCLUDE -> ! C: !
+----------+
,ГДЕ "SR:" - ТО УСТРОЙСТВО, ОТКУДА ВВОДИТСЯ ТЕКУЩИЙ ВХОДНОЙ
ФАЙЛ.
НА ЧЕРТЕЖЕ ПОМЕЧЕНЫ ТОЧКИ НАЧАЛА ПРОСМОТРА, ЗАВИСЯЩИЕ ОТ
СИНТАКСИСА ОПЕРАТОРА "#INCLUDE". ЕСЛИ ФАЙЛ НАЙДЕН, ТО
ДАЛЬНЕЙШИЙ ПОИСК ПРЕКРАЩАЕТСЯ. НЕОБХОДИМО ОТМЕТИТЬ, ЧТО КОГДА
ПРЕПРОЦЕССОР ПЕРЕКЛЮЧАЕТСЯ НА ВВОД ИЗ УКАЗАННОГО
ДОПОЛНИТЕЛЬНОГО ВХОДНОГО ФАЙЛА, ТО "SR:" УСТАНАВЛИВАЕТСЯ
СООТВЕТСТВУЮЩИМ ТОМУ УСТРОЙСТВУ, ОТКУДА ВВОДИТСЯ
ДОПОЛНИТЕЛЬНЫЙ ФАЙЛ. ЭТО НЕОБХОДИМО УЧИТЫВАТЬ ПРИ ОРГАНИЗАЦИИ
ВЛОЖЕННЫХ "#INCLUDE", СМ. "ОПИСАНИЕ ЯЗЫКА. ПРЕПРОЦЕССОР".
- D ("-DSYM" ИЛИ "-DSYM=VAL") - ВКЛЮЧАЕТ СИМВОЛ "SYM" В
ЧИСЛО ОПРЕДЕЛЕННЫХ (ПО "#DEFINE") В ПРЕПРОЦЕССОРЕ
СИМВОЛОВ; СИМВОЛ ПОЛУЧАЕТ ЗНАЧЕНИЕ (ТЕКСТОВОЕ) "VAL".
ЕСЛИ КОНСТРУКЦИЯ "=VAL" ОТСУТСТВУЕТ, ТО СИМВОЛ ПОЛУЧАЕТ
ЗНАЧЕНИЕ "1". СМ. "ОПИСАНИЕ ЯЗЫКА. ПРЕПРОЦЕССОР".
- U ("-USYM") - ОТМЕНЯЕТ В ПРЕПРОЦЕССОРЕ ОПРЕДЕЛЕНИЕ
ПРЕДОПРЕДЕЛЕННОГО СИМВОЛА "SYM". В ПРЕПРОЦЕССОРЕ
ОПИСЫВАЕМОГО КОМПИЛЯТОРА ПРЕДОПРЕДЕЛЕНЫ ДВА СИМВОЛА:
"RT11" И "PDP11" (ОБА СИМВОЛА НАБИРАЮТСЯ НА НИЖНЕМ
РЕГИСТРЕ И ОПРЕДЕЛЕНЫ КАК "1"). ЕСЛИ ОДИН И ТОТ ЖЕ СИМВОЛ
ЗАДАН В КЛЮЧАХ "-D" И "-U" ОДНОВРЕМЕННО, ТО СИМВОЛ БУДЕТ
НЕОПРЕДЕЛЕН. СМ. "ОПИСАНИЕ ЯЗЫКА. ПРЕПРОЦЕССОР".
- O ("-O OUTFILE") - ПОЗВОЛЯЕТ ЯВНО ЗАДАТЬ ИМЯ ВЫХОДНОГО
ФАЙЛА. ЕСЛИ КЛЮЧ 'O' ОТСУТСТВУЕТ, ТО ВЫХОДНОЙ ФАЙЛ
СОЗДАЕТСЯ НА УСТРОЙСТВЕ "DK:", ИМЕЕТ ИМЯ ВХОДНОГО ФАЙЛА И
ТИП ".I", ".S" ИЛИ ".OBJ" В ЗАВИСИМОСТИ ОТ ТЕКУЩИХ КЛЮЧЕЙ
(СМ. НИЖЕ). ЕСЛИ КЛЮЧ 'O' ЗАДАН, ТО ИМЯ ВЫХОДНОГО ФАЙЛА -
"OUTFILE" - ДОЛЖНО БЫТЬ ПЕРВЫМ АРГУМЕНТОМ-НЕКЛЮЧОМ
КОМАНДНОЙ СТРОКИ ПОСЛЕ АРГУМЕНТА, СОДЕРЖАЩЕГО КЛЮЧ 'O'.
ИМЯ ВЫХОДНОГО ФАЙЛА ЗАДАЕТСЯ В ФОРМАТЕ CSI, ОДНАКО ЛЮБЫЕ
ЧАСТИ ИМЕНИ МОГУТ БЫТЬ ОПУЩЕНЫ (НЕ ВСЕ СРАЗУ, КОНЕЧНО):
- 7 -
- ЕСЛИ ПРИСУТСТВУЮТ ВСЕ ЧАСТИ ПОЛНОГО ИМЕНИ ФАЙЛА (ИМЯ
УСТРОЙСТВА, ИМЯ ФАЙЛА, ТИП ФАЙЛА, ДЛИНА) ТО
ОТКРЫВАЕТСЯ УКАЗАННЫЙ ФАЙЛ.
- ЕСЛИ ОПУЩЕНО ИМЯ УСТРОЙСТВА, БЕРЕТСЯ "DK:".
- ЕСЛИ ОПУЩЕНО ИМЯ ФАЙЛА, БЕРЕТСЯ ИМЯ ВХОДНОГО ФАЙЛА.
- ЕСЛИ ОПУЩЕН ТИП ФАЙЛА, ТО, В ЗАВИСИМОСТИ ОТ ТЕКУЩИХ
КЛЮЧЕЙ БЕРЕТСЯ ТИП СОГЛАСНО ТАБЛИЦЕ ('+' ОБОЗНАЧАЕТ
ПРИСУТСТВИЕ КЛЮЧА, '-' - ОТСУТСТВИЕ, 'X' - СОСТОЯНИЕ
КЛЮЧА БЕЗРАЗЛИЧНО):
+-------------------+
! КЛЮЧИ ! ТИП !
+-----------+ ВЫХ. !
! M ! C ! S ! ФАЙЛА !
+---+---+---+-------+
! X ! X ! - ! .OBJ !
+---+---+---+-------+
! X ! - ! + ! .S !
+---+---+---+-------+
! - ! + ! + ! .I !
+---+---+---+-------+
- ЕСЛИ ОПУЩЕНА ДЛИНА, ТО ИСПОЛЬЗУЕТСЯ ТА ЖЕ ДЛИНА, ЧТО
И ДЛЯ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ. СМ. "ПРОБЛЕМЫ
ПРОМЕЖУТОЧНЫХ ФАЙЛОВ".
НЕОБХОДИМО ОТМЕТИТЬ, ЧТО ЕСЛИ ЗАДАННОЕ ИМЯ ВЫХОДНОГО ФАЙЛА
СИНТАКСИЧЕСКИ ВЕРНО, ОДНАКО ОТКРЫТЬ ВЫХОДНОЙ ФАЙЛ НЕВОЗМОЖНО
(НАПРИМЕР, УКАЗАНО НЕСУЩЕСТВУЮЩЕЕ УСТРОЙСТВО ИЛИ СЛИШКОМ
БОЛЬШАЯ ДЛИНА), ТО ОШИБКА ОТКРЫТИЯ БУДЕТ ЗАФИКСИРОВАНА ТОЛЬКО
НА ПОСЛЕДНЕЙ СТАДИИ КОМПИЛЯЦИИ, Т.Е. ТОГДА, КОГДА БУДЕТ
ФАКТИЧЕСКИ ВЫПОЛНЯТЬСЯ ОТКРЫТИЕ ВЫХОДНОГО ФАЙЛА.
2.3. ПРОБЛЕМЫ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ
ДАННЫЙ ПРОГРАММНЫЙ КОМПЛЕКС ИСПОЛЬЗУЕТ ПРОМЕЖУТОЧНЫЕ ФАЙЛЫ
ДЛЯ ПЕРЕДАЧИ ИНФОРМАЦИИ МЕЖДУ СТАДИЯМИ И МЕЖДУ ПРОХОДАМИ
СТАДИИ КОМПИЛЯТОРА. ДЛЯ БОЛЕЕ РАЦИОНАЛЬНОГО ИСПОЛЬЗОВАНИЯ
ДИСКОВОГО ПРОСТРАНСТВА ПРЕДПРИНЯТЫ СЛЕДУЮЩИЕ МЕРЫ:
- КОМПИЛЯТОР ОДНОВРЕМЕННО ОТКРЫВАЕТ ДЛЯ ВЫВОДА ТОЛЬКО ОДИН
ФАЙЛ (ПРОМЕЖУТОЧНЫЙ ИЛИ ВЫХОДНОЙ).
- МОЖЕТ БЫТЬ УКАЗАНО УСТРОЙСТВО ДЛЯ РАЗМЕЩЕНИЯ
ПРОМЕЖУТОЧНЫХ ФАЙЛОВ ПУТЕМ НАЗНАЧЕНИЯ ЛОГИЧЕСКИХ ИМЕН
"WF:" ИЛИ "TMP:" (В ТАБЛИЦЕ '-' ОЗНАЧАЕТ, ЧТО ИМЯ
НЕОПРЕДЕЛЕНО, '+' - ОПРЕДЕЛЕНО, 'X' - СОСТОЯНИЕ ИМЕНИ
БЕЗРАЗЛИЧНО).
- 8 -
+--------------------------------+
! ЛОГИЧЕСКИЕ ИМЕНА ! УСТРОЙСТВО !
+-------------------+ ДЛЯ ВРЕМ. !
! TMP: ! WF: ! ФАЙЛОВ !
+---------+---------+------------+
! - ! - ! DK: !
+---------+---------+------------+
! - ! + ! WF: !
+---------+---------+------------+
! + ! X ! TMP: !
+---------+---------+------------+
П_Р_И_М_Е_Ч_А_Н_И_Е. ДВА ЛОГИЧЕСКИХ ИМЕНИ, ВЫПОЛНЯЮЩИХ
ОДИНАКОВЫЕ ФУНКЦИИ, ВВЕДЕНЫ ДЛЯ СООТВЕТСТВИЯ СОГЛАШЕНИЯМ НА
ИМЯ УСТРОЙСТВА ДЛЯ ВРЕМЕННЫХ ФАЙЛОВ КАК ОС UNIX (ЛОГ. ИМЯ
"TMP:"), ТАК И ОС РАФОС (ЛОГ. ИМЯ "WF:").
- ВОЗМОЖНО ЯВНОЕ УКАЗАНИЕ ДЛИНЫ ПРОСТРАНСТВА, КОТОРОЕ БУДЕТ
РЕЗЕРВИРОВАТЬСЯ ПРИ ОТКРЫТИИ ВСЕХ ПРОМЕЖУТОЧНЫХ И
ВЫХОДНОГО ФАЙЛОВ: ДЛИНА ПРОСТРАНСТВА, РЕЗЕРВИРУЕМОГО ПРИ
ОТКРЫТИИ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ, МОЖЕТ ОПРЕДЕЛЯТЬСЯ ЯВНЫМ
УКАЗАНИЕМ ДЛИНЫ В СПЕЦИФИКАЦИИ ВХОДНОГО ФАЙЛА И ПРИ
ПОМОЩИ КЛЮЧА '-Е'; ДЛИНА ПРОСТРАНСТВА, РЕЗЕРВИРУЕМОГО ДЛЯ
ВЫХОДНОГО ФАЙЛА, МОЖЕТ ДОПОЛНИТЕЛЬНО РЕГУЛИРОВАТЬСЯ ЯВНЫМ
УКАЗАНИЕМ ДЛИНЫ ВЫХОДНОГО ФАЙЛА. ЕСЛИ НЕТ НИ ЯВНОГО
УКАЗАНИЯ ДЛИНЫ В СПЕЦИФИКАЦИИ ВХОДНОГО ФАЙЛА, НИ КЛЮЧА
'-E', ТО ВСЕ ПРОМЕЖУТОЧНЫЕ ФАЙЛЫ ОТКРЫВАЮТСЯ БЕЗ УКАЗАНИЯ
ДЛИНЫ. ЕСЛИ ЕСТЬ ЯВНОЕ УКАЗАНИЕ ДЛИНЫ ВХОДНОГО ФАЙЛА, ТО
ЭТА ДЛИНА ИСПОЛЬЗУЕТСЯ ПРИ ОТКРЫТИИ ВСЕХ ПРОМЕЖУТОЧНЫХ
ФАЙЛОВ. ЕСЛИ ЯВНОГО УКАЗАНИЯ ДЛИНЫ В СПЕЦИФИКАЦИИ
ВХОДНОГО ФАЙЛА НЕТ И ПРИСУТСТВУЕТ КЛЮЧ '-E', ТО ДЛЯ
ОТКРЫТИЯ ВСЕХ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ ИСПОЛЬЗУЕТСЯ ДЛИНА
"[-1]" (Т.E. РЕЗЕРВИРУЕТСЯ МАКСИМАЛЬНОЕ ВОЗМОЖНОЕ
ПРОСТРАНСТВО). ПРИ НАЛИЧИИ ЯВНОГО УКАЗАНИЯ ДЛИНЫ В
СПЕЦИФИКАЦИИ ВХОДНОГО ФАЙЛА КЛЮЧ '-E' ИГНОРИРУЕТСЯ. ЕСЛИ
СПЕЦИФИКАЦИЯ ВЫХОДНОГО ФАЙЛА ОТСУТСТВУЕТ ИЛИ В
СПЕЦИФИКАЦИИ ВЫХОДНОГО ФАЙЛА ОТСУТСТВУЕТ ДЛИНА, ТО ПРИ
ОТКРЫТИИ ВЫХОДНОГО ФАЙЛА ИСПОЛЬЗУЕТСЯ ТА ЖЕ ДЛИНА, ЧТО И
ПРИ ОТКРЫТИИ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ, В ПРОТИВНОМ СЛУЧАЕ
ИСПОЛЬЗУЕТСЯ УКАЗАННАЯ ДЛИНА.
ОБЫЧНО ПРОМЕЖУТОЧНЫЕ ФАЙЛЫ СТИРАЮТСЯ КАК ПРИ УСПЕШНОМ
ЗАВЕРШЕНИИ, ТАК И ПРИ ОБНАРУЖЕНИИ ОШИБОК. ИСКЛЮЧЕНИЕ
СОСТАВЛЯЕТ АССЕМБЛЕР, КОТОРЫЙ ПРИ ОБНАРУЖЕНИИ ОШИБОК ОСТАВЛЯЕТ
СВОИ ВХОДНОЙ И ВЫХОДНОЙ ФАЙЛЫ. КЛЮЧОМ 'N' МОЖНО ЗАПРЕТИТЬ
СТИРАНИЕ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ. ИХ ТИПЫ СЛЕДУЮЩИЕ:
- .TMP - ВЫХОД СТАДИИ ПРЕПРОЦЕССОРА (CPP).
- .TM1 - ВЫХОД ПЕРВОГО ПРОХОДА СТАДИИ КОМПИЛЯТОРА (C0).
- .S - ВЫХОД ВТОРОГО ПРОХОДА СТАДИИ КОМПИЛЯТОРА И СТАДИИ
ОПТИМИЗАТОРА (C1 И C2).
2.4. ЭМУЛЯЦИЯ EIS
ДАННЫЙ КОМПИЛЯТОР ГЕНЕРИРУЕТ ПРЯМОЙ (INLINE) КОД С
- 9 -
ИНСТРУКЦИЯМИ EIS. ДЛЯ ВЫПОЛНЕНИЯ ПРОГРАММ, ПОЛУЧЕННЫХ ПРИ
ПОМОЩИ ЭТОГО КОМПИЛЯТОРА НА ЭВМ, НЕ ИМЕЮЩЕГО АППАРАТНОГО EIS
(НАПРИМЕР, НА ЭВМ "ЭЛЕКТРОНИКА НЦ80-01Д"), НЕОБХОДИМА
ПРОГРАММНАЯ ЭМУЛЯЦИЯ ИНСТРУКЦИЙ EIS.
ЭМУЛЯТОР EIS МОЖЕТ БЫТЬ ВКЛЮЧЕН ПРИ КОМПОНОВКЕ (ПРИ
ИСПОЛЬЗОВАНИИ ГОЛОВНОГО МОДУЛЯ SPNHD, А НЕ SPEIS).
ЭМУЛЯТОР EIS ЭМУЛИРУЕТ КОМАНДЫ "MUL", "DIV", "ASH", "ASHC".
РАЗМЕР ЭМУЛЯТОРА ОКОЛО 3-Х БЛОКОВ (1,5 КБ).
ЭМУЛЯТОР ВЫПОЛНЯЕТ (НА ЭВМ "ЭЛЕКТРОНИКА НЦ-80") КОМАНДУ
"MUL" ПРИМЕРНО 1.2 МС ПРОТИВ ПРИМЕРНО 30 МКС ДЛЯ СМ-4, Т.Е.
ПРИМЕРНО В 40 РАЗ МЕДЛЕННЕЕ, И КОМАНДУ "DIV" ПРИМЕРНО 4,2 МС
ПРОТИВ 30 МКС, Т.Е ПРИМЕРНО В 140 РАЗ МЕДЛЕННЕЕ.
КОМПИЛЯТОР ПОСТАВЛЯЕТСЯ С ВКЛЮЧЕННЫМ ЭМУЛЯТОРОМ EIS.
2.5. ВЫЧИСЛЕНИЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
ДАНННЫЙ КОМПИЛЯТОР ЯЗЫКА "СИ" ПОДДЕРЖИВАЕТ КОНСТРУКЦИИ,
ИСПОЛЬЗУЮЩИЕ ВЫЧИСЛЕНИЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ (ПЗ), Т.Е.
ОПЕРАЦИИ С ПЕРЕМЕННЫМИ ТИПОВ "FLOAT" И "DOUBLE". КОМПИЛЯТОР
ГЕНЕРИРУЕТ ПРЯМОЙ (INLINE) КОД С ИНСТРУКЦИЯМИ FPU ("FLOATING
POINT UNIT"), ЧТО ПОЗВОЛЯЕТ ПОЛУЧИТЬ ВЫСОКУЮ СКОРОСТЬ
ВЫПОЛНЕНИЯ ПРОГРАММ НА ЭВМ, ИМЕЮЩИХ СООТВЕТСТВУЮЩЕЕ АППАРАТНОЕ
ОБЕСПЕЧЕНИЕ. ДЛЯ ВЫПОЛНЕНИЯ ПРОГРАМ, ПОЛУЧЕННЫХ ПРИ ПОМОЩИ
ЭТОГО КОМПИЛЯТОРА И ИСПОЛЬЗУЮЩИХ ВЫЧИСЛЕНИЯ С ПЗ НА ЭВМ, НЕ
ИМЕЮЩИХ АППАРАТНОГО FPU, НЕОБХОДИМА ПРОГРАМНАЯ ЭМУЛЯЦИЯ
ИНСТРУКЦИЙ FPU.
2.5.1. ЭМУЛЯЦИЯ FPU
БУДЕТ ЛИ ВКЛЮЧЕН ЭМУЛЯТОР FPU ОПРЕДЕЛЯЕТСЯ НАЛИЧИЕМ
ОПЕРАЦИЙ С ПЗ В ТРАНСЛИРУЕМОЙ ПРОГРАММЕ И КЛЮЧАМИ КОМАНДНОЙ
СТРОКИ:
- ЕСЛИ ПРИСУТСТВУЕТ КЛЮЧ '-F', ТО ЭМУЛЯТОР FPU БЕЗУСЛОВНО
ВКЛЮЧАЕТСЯ.
- EСЛИ ПРИСУТСТВУЕТ КЛЮЧ '-J', ТО ЭМУЛЯТОР FPU БЕЗУСЛОВНО
НЕ ВКЛЮЧАЕТСЯ.
- ПРИ ОТСУТСТВИИ КЛЮЧЕЙ 'F' И 'J' ЭМУЛЯТОР ВКЛЮЧАЕТСЯ
ТОЛЬКО ПРИ НАЛИЧИИ В КОМПИЛИРУЕМОЙ ПРОГРАММЕ ОПЕРАЦИЙ С
ПЗ.
П_Р_И_М_Е_Ч_А_Н_И_Е. ПОВЕДЕНИЕ КОМПИЛЯТОРА ПРИ ОТСУТСТВИИ
КЛЮЧЕЙ МОЖЕТ БЫТЬ ИЗМЕНЕНО ПРИ ГЕНЕРАЦИИ ТАК, ЧТО ЭМУЛЯТОР НЕ
БУДЕТ ВКЛЮЧАТЬСЯ. СМ. "РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА.
????????".
РАЗМЕР ЭМУЛЯТОРА FPU ОКОЛО 6 БЛОКОВ (3 КБАЙТ).
- 10 -
СКОРОСТЬ ВЫЧИСЛЕНИЙ НА СМ-4 (С ЭМУЛЯТОРОМ, В РАФОС/TS
(TSX-PLUS)) - ПРИМЕРНО 100 ДЕЛЕНИЙ С ДВОЙНОЙ ТОЧНОСТЬЮ В
СЕКУНДУ, ПРИЧЕМ НА СИСТЕМНУЮ ОБРАБОТКУ (ПРЕРЫВАНИЙ) ТРАТИТСЯ
ПРИМЕРНО 10% ВРЕМЕНИ, И ПРИМЕРНО 90% СОБСТВЕННО НА РАБОТУ
ЭМУЛЯТОРА. ВЫЧИСЛЕНИЯ С ЭМУЛЯТОРОМ ВЫПОЛНЯЮТСЯ ПРИМЕРНО В 8
РАЗ БЫСТРЕЕ, ЧЕМ В UNIX V7 (ИЗ-ЗА МАЛОЙ ЭФФЕКТИВНОСТИ
СИСТЕМНОЙ ОБРАБОТКИ ОС UNIX), И ПРИМЕРНО В 3 РАЗА МЕДЛЕННЕЕ,
ЧЕМ ВЫПОЛНЯЕТ ПОДОБНЫЕ ВЫЧИСЛЕНИЯ FORTRAN-IV С FIS НА СМ-4 В
ОС РАФОС/TS.
ЭМУЛЯТОР FPU НЕ ИСПОЛЬЗУЕТ И НЕ ЭМУЛИРУЕТ КОМАНД FIS И EIS.
ВКЛЮЧЕНИЕ ЭМУЛЯТОРА FPU ПРОИСХОДИТ ПРИ КОМПОНОВКЕ И
УПРАВЛЯЕТСЯ НАЛИЧИЕМ ГЛОБАЛЬНОЙ ССЫЛКИ "$$FPEM", КОТОРАЯ
ВСТАВЛЯЕТСЯ В ПРОГРАММУ НА СТАДИИ КОМПИЛЯЦИИ (C1).
КОМПИЛЯТОР ИСПОЛЬЗУЕТ ВЫЧИСЛЕНИЯ С ПЗ И ПОСТАВЛЯЕТСЯ С
ВКЛЮЧЕННЫМ ЭМУЛЯТОРОМ FPU.
2.5.2. ИНИЦИАЛИЗАЦИЯ FPU
ПЕРЕД ИСПОЛЬЗОВАНИЕМ КОМАНД FPU НЕОБХОДИМО ПРОВЕСТИ
ИНИЦИАЛИЗАЦИЮ И УСТАНОВКУ РЕЖИМА ПРОЦЕССОРА FPU - КАК
АППАРАТНОГО, ТАК И РЕАЛИЗОВАННОГО ЭМУЛЯТОРОМ. ОБЫЧНО
ИНИЦИАЛИЗАЦИЯ ВЫПОЛНЯЕТСЯ ПРИ СТАРТЕ ПРОГРАММЫ, В ТОМ СЛУЧАЕ,
ЕСЛИ В ПРОГРАММЕ ИСПОЛЬЗУЮТСЯ ОПЕРАЦИИ С ПЗ. ИНИЦИАЛИЗАЦИЮ
МОЖНО БЕЗУСЛОВНО ОТКЛЮЧИТЬ, ИСПОЛЬЗУЯ КЛЮЧ 'K'. ЭТО ПОЛЕЗНО
ПРИ КОМПИЛЯЦИИ ФУНКЦИЙ, КОТОРЫЕ СОДЕРЖАТ ОПЕРАЦИИ С ПЗ, НО
МОГУТ БЫТЬ ИСПОЛЬЗОВАНЫ В ЧИСТО "ЦЕЛЫХ" ПРИЛОЖЕНИЯХ,
ПРИЛОЖЕНИЯХ, В КОТОРЫХ ОПЕРАЦИИ С ПЗ НЕ ИСПОЛЬЗУЮТСЯ (ПРИМЕР -
ФУНКЦИЯ _DOSCAN() ИЗ СТАНДАРТНОЙ БИБЛИОТЕКИ, КОТОРАЯ СОДЕРЖИТ
КОМАНДЫ ПРЕОБРАЗОВАНИЯ ДЛЯ ЧИСЕЛ С ПЗ, ОДНАКО ЧАСТО ОН
ИСПОЛЬЗУЕТСЯ В ПРОГРАММАХ, НЕ ИСПОЛЬЗУЮЩИХ ВЕЩЕСТВЕННЫХ
ЧИСЕЛ).
ВКЛЮЧЕНИЕ ИНИЦИАЛИЗАЦИИ FPU (ОНА ВЫПОЛНЯЕТСЯ В МОДУЛЕ
$$INIT()) УПРАВЛЯЕТСЯ НАЛИЧИЕМ ГЛОБАЛЬНОЙ ССЫЛКИ "FPIN$$",
КОТОРАЯ ВСТАВЛЯЕТСЯ В ПРОГРАММУ НА СТАДИИ КОМПИЛЯТОРА (C1).
2.5.3. ФОРМАТНЫЙ ВЫВОД ЧИСЕЛ С ПЛАВАЮЩЕЙ
ЗАПЯТОЙ
ПОСКОЛЬКУ АРИФМЕТИКА С ПЗ ИСПОЛЬЗУЕТСЯ ВО МНОГИХ
ПРИЛОЖЕНИЯХ ЯЗЫКА "СИ" НЕ ТАК УЖ ЧАСТО, СУЩЕСТВУЕТ МЕХАНИЗМ
ИСКЛЮЧЕНИЯ (ПРИ КОМПОНОВКЕ) ФУНКЦИЙ ФОРМАТНОГО ВЫВОДА ЧИСЕЛ С
ПЗ. ПО УМОЛЧАНИЮ ВКЛЮЧЕНИЕ ФУНКЦИЙ ФОРМАТНОГО ВЫВОДА ЧИСЕЛ С
ПЗ ПРОИСХОДИТ ПРИ НАЛИЧИИ В ПРОГРАММЕ ОПЕРАЦИЙ С ПЗ, ОДНАКО
ВКЛЮЧЕНИЕ ЭТИХ ФУНКЦИЙ МОЖЕТ БЫТЬ ПОДАВЛЕНО УКАЗАНИЕМ В
КОМАНДНОЙ СТРОКЕ КЛЮЧА '-Z'. ЭТО МОЖЕТ БЫТЬ ПОЛЕЗНО ДЛЯ
ЭКОНОМИИ ПАМЯТИ, ЕСЛИ В ПРОГРАММЕ ИСПОЛЬЗУЮТСЯ ОПЕРАЦИИ С ПЗ,
А ВЫВОД ЧИСЕЛ С ПЗ НЕ ИСПОЛЬЗУЕТСЯ.
- 11 -
ЕСЛИ ФУНКЦИИ НЕ ВКЛЮЧЕНЫ, А ВЫВОД ЧИСЕЛ С ПЗ ИСПОЛЬЗУЕТСЯ,
ТО В ПОЛЕ ЧИСЛА БУДЕТ ВЫВЕДЕН ОДИН СИМВОЛ '?' И НЕОБХОДИМОЕ
ДЛЯ ЗАПОЛНЕНИЯ ПОЛЯ ЧИСЛО ЗАПОЛНИТЕЛЕЙ.
РАЗМЕР ПОДПРОГРАММ ФОРМАТНОГО ВЫВОДА ЧИСЕЛ С ПЗ ОКОЛО 2
БЛОКОВ (1 КБАЙТ).
ВКЛЮЧЕНИЕ ФУНКЦИЙ ФОРМАТНОГО ВЫВОДА ЧИСЕЛ С ПЗ ПРОИСХОДИТ
ПРИ КОМПОНОВКЕ И УПРАВЛЯЕТСЯ НАЛИЧИЕМ ГЛОБАЛЬНОЙ ССЫЛКИ
"$$FPPR", КОТОРАЯ (ПРИ НЕОБХОДИМОСТИ) ВКЛЮЧАЕТСЯ В ПРОГРАММУ
НА СТАДИИ КОМПИЛЯЦИИ (C1).
2.6. ОПТИМИЗАЦИЯ
КОМПИЛЯТОР ВЫПОЛНЯЕТ РАЗЛИЧНЫЕ ОПТИМИЗАЦИОННЫЕ
ПРЕОБРАЗОВАНИЯ ПРОГРАММЫ, В ОСНОВНОМ КАСАЮЩИЕСЯ ОПТИМИЗАЦИИ
ВЫРАЖЕНИЙ (СМ. "РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА"). КРОМЕ
ТОГО, КЛЮЧОМ 'X' МОЖЕТ БЫТЬ ВКЛЮЧЕНА СТАДИЯ ОПТИМИЗАТОРА (C2),
КОТОРАЯ БУДЕТ ВЫПОЛНЯТЬСЯ ПОСЛЕ СТАДИИ КОМПИЛЯТОРА. СТАДИЯ
ОПТИМИЗАТОРА УВЕЛИЧИВАЕТ ОБЩЕЕ ВРЕМЯ КОМПИЛЯЦИИ ПРИБЛИЗИТЕЛЬНО
НА 20% (ПРИ НАЛИЧИИ ВСЕХ ДРУГИХ СТАДИЙ) И ПРИВОДИТ, В-СРЕДНЕМ,
К УМЕНЬШЕНИЮ ОБ'ЕМА РЕЗУЛЬТИРУЮЩЕЙ ПРОГРАММЫ И УВЕЛИЧЕНИЮ
СКОРОСТИ ЕЕ ВЫПОЛНЕНИЯ НА 3-5% (ЧИСЛА ОТНОСЯТСЯ И К СКОРОСТИ,
И К ОБ'ЕМУ).
ПРИ ПОМОЩИ КЛЮЧА 'T' МОЖНО ЗАПРОСИТЬ СТАТИСТИКУ СТАДИИ
ОПТИМИЗАТОРА.
ОСОБЕННОСТЬЮ РАБОТЫ ОПТИМИЗАТОРА ЯВЛЯЕТСЯ ТО, ЧТО ПРИ
ОБРАБОТКЕ ФУКЦИИ ОН ПОМЕЩАЕТ В ОПЕРАТИВНУЮ ПАМЯТЬ ВЕСЬ ЕЕ
(АССЕМБЛЕРНЫЙ) ТЕКСТ, ПОЭТОМУ ДЛЯ БОЛЬШИХ ФУНКЦИЙ ОПТИМИЗАТОРУ
МОЖЕТ НЕ ХВАТИТЬ ОПЕРАТИВНОЙ ПАМЯТИ. ВЫХОД В ТАКОЙ СИТУАЦИИ -
РАЗБИВАТЬ ПРОГРАММУ НА БОЛЕЕ МЕЛКИЕ ФУНКЦИИ.
3. КОМПОНОВКА
ПОСЛЕ КОМПИЛЯЦИИ ПОЛУЧЕННЫЕ ОБ'ЕКТНЫЕ ФАЙЛЫ ДОЛЖНЫ БЫТЬ
СКОМПОНОВАНЫ С БИБЛИОТЕКАМИ (И ДРУГ С ДРУГОМ). ПОСТАВЛЯЮТСЯ
СЛЕДУЮЩИЕ МОДУЛИ И БИБЛИОТЕКИ:
SPEIS.OBJ
- ГОЛОВНОЙ МОДУЛЬ ДЛЯ ЭВМ С EIS.
SPNHD.OBJ
- ГОЛОВНОЙ МОДУЛЬ ДЛЯ ЭВМ БЕЗ EIS (ОБЕСПЕЧИВАЕТ ВКЛЮЧЕНИЕ
ЭМУЛЯТОРА EIS).
CXLIB.OBJ
- СТАНДАРТНАЯ БИБЛИОТЕКА.
INITNF.OBJ
- МОДУЛЬ ИНИЦИАЛИЗАЦИИ БЕЗ ЭМУЛЯЦИИ СТАРТОВОЙ
ПОСЛЕДОВАТЕЛЬНОСТИ ОС UNIX.
- 12 -
NFTIO.OBJ МОДУЛЬ НЕФАЙЛОВОГО ТЕРМИНАЛЬНОГО ВВОДА-ВЫВОДА.
CRLIB.OBJ
- БИБЛИОТЕКА СИСТЕМНЫХ ФУНКЦИЙ ОС РАФОС.
CTLIB.OBJ
- БИБЛИОТЕКА ДОПОЛНИТЕЛЬНЫХ СИСТЕМНЫХ ФУНКЦИЙ TS МОНИТОРА
ОС РАФОС.
CMLIB.OBJ
- БИБЛИОТЕКА СТАНДАРТНЫХ МАТЕМАТИЧЕСКИХ ФУНКЦИЙ.
ASPEIS.OBJ, ASPNHD.OBJ, CALIB.OBJ
- ГОЛОВНЫЕ МОДУЛИ ДЛЯ АВТОНОМНЫХ ПРОГРАММ И БИБЛИОТЕКА
АВТОНОМНОЙ ПОДДЕРЖКИ.
ANTIO.OBJ
- МОДУЛЬ/ЗАГЛУШКА ДЛЯ ОТКЛЮЧЕНИЯ ТЕРМИНАЛЬНОГО ВВОДА/ВЫВОДА
В АВТОНОМНЫХ ПРОГРАММАХ.
БОЛЕЕ ПОДРОБНУЮ ИНФОРМАЦИЮ О НАЗНАЧЕНИИ И СОСТАВЕ БИБЛИОТЕК
МОЖНО ПОЛУЧИТЬ В СООТВЕТСТВУЮЩИХ КНИГАХ "РУКОВОДСТВА
ПРОГРАММИСТА".
КОМПОНОВКА ВЫПОЛНЯЕТСЯ ПРОГРАММОЙ "LINК", КОТОРАЯ
ВЫЗЫВАЕТСЯ КОМАНДОЙ "LINK" МОНИТОРА ИЛИ НЕПОСРЕДСТВЕННО,
НАПРИМЕР:
LINK PROG,C:SPEIS,C:CXLIB/BOTTOM:2000
ИЛИ
R LINK
PROG=PROG,C:SPEIS,CXLIB/B:2000
^C
В ОБЩЕМ СЛУЧАЕ ФАЙЛЫ ПРИ КОМПОНОВКЕ ДОЛЖНЫ УКАЗЫВАТЬСЯ В
СЛЕДУЮЩЕМ ПОРЯДКЕ:
- ОБ'ЕКТНЫЕ ФАЙЛЫ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ.
- МОДУЛИ НЕСТАНДАРТНОЙ КОНФИГУРАЦИИ ИСПОЛНЯЮЩЕЙ СИСТЕМЫ
(ЕСЛИ ОНИ НЕОБХОДИМЫ): INITNF.OBJ, NFTIO.OBJ, AFTIO.OBJ.
- ГОЛОВНОЙ МОДУЛЬ SPEIS ИЛИ SPNHD - В ЗАВИСИМОСТИ ОТ ТОГО,
ИМЕЕТ ЛИ ЭВМ, НА КОТОРОЙ БУДЕТ ВЫПОЛНЯТЬСЯ ПРОГРАММА,
АППАРАТНЫЙ EIS ИЛИ НЕТ. ГОЛОВНОЙ МОДУЛЬ НЕ ВКЛЮЧЕН В
СТАНДАРТНУЮ БИБЛИОТЕКУ, Т.К. В ОС РАФОС В БИБЛИОТЕКЕ НЕ
МОЖЕТ НАХОДИТСЯ МОДУЛЬ, С КОТОРОГО ПРОИЗВОДИТСЯ ЗАПУСК
ПРОГРАММЫ.
- ДОПОЛНИТЕЛЬНЫЕ БИБЛИОТЕКИ (CRLIB, CTLIB, CMLIB И ДР., А
ТАКЖЕ БИБЛИОТЕКИ ПОЛЬЗОВАТЕЛЯ).
- СТАНДАРТНАЯ БИБЛИОТЕКА CXLIB.
- 13 -
КЛЮЧ "BOTTOM" В КОМАНДЕ "LINK" И КЛЮЧ 'B' В КОМАНДНОЙ
СТРОКЕ ПРОГРАММЫ "LINK" ОПРЕДЕЛЯЮТ (OCTAL) ВЕРХНЮЮ ГРАНИЦУ
ПРОСТРАНСТВА, ОТВОДИМОГО ПОД СТЕК (ПО УМОЛЧАНИЮ ВЕРХНЯЯ
ГРАНИЦА РАВНА 01000). ПРИЧИНА НЕОБХОДИМОСТИ УВЕЛИЧЕНИЯ
ОТВОДИМОГО ПОД СТЕК ПРОСТРАНСТВА В ТОМ, ЧТО ПРОГРАММЫ,
НАПИСАННЫЕ НА "СИ", В СТЕКЕ РАЗМЕЩАЮТ СВОИ ЛОКАЛЬНЫЕ
(АВТОМАТИЧЕСКИЕ) ПЕРЕМЕННЫЕ. ПРОСТЫЕ ПРОГРАММЫ МОГУТ РАБОТАТЬ
И С ОБЫЧНЫМ СТЕКОМ (01000), А ДЛЯ СЛОЖНЫХ ПРОГРАММ (С БОЛЬШИМ
ОБ'ЕМОМ АВТОМАТИЧЕСКИХ ПЕРЕМЕННЫХ ИЛИ С БОЛЬШОЙ ГЛУБИНОЙ
ВЛОЖЕННОСТИ ВЫЗОВОВ) ДЛЯ СТЕКА МОЖЕТ ПОНАДОБИТЬСЯ ПРОСТРАНСТВО
С ВЕРХНЕЙ ГРАНИЦЕЙ БОЛЬШЕ 02000.
ПЕРЕПОЛНЕНИЕ СТЕКА ПРИВОДИТ, КАК ПРАВИЛО, К ФАТАЛЬНЫМ
СИСТЕМНЫМ ОШИБКАМ ТИПА "STACK OVERFLOW", "TRAP TO 4" ИЛИ "TRAP
TO 10", И МОЖЕТ НАРУШИТЬ РАБОТУ ОПЕРАЦИОННОЙ СИСТЕМЫ (ЕСЛИ
ИСПОЛЬЗУЕТСЯ НЕ TS МОНИТОР). РЕКОМЕНДУЕТСЯ ПРИ ОТЛАДКЕ
ИСПОЛЬЗОВАТЬ КЛЮЧ 'P' КОМПИЛЯТОРА, СМ. "СРЕДСТВА ОТЛАДКИ". ПРИ
ЭТОМ БУДЕТ ДИАГНОСТИРОВАТЬСЯ ОПУСКАНИЕ СТЕКА НИЖЕ 0600.
БОЛЕЕ ПОДРОБНУЮ ИНФОРМАЦИЮ О КОМПОНОВКЕ СМ. ОПИСАНИЕ
КОМАНДЫ МОНИТОРА "LINK" И ОПИСАНИЕ ПРОГРАММЫ "LINK".
3.1. СОЗДАНИЕ АВТОНОМНЫХ ПРОГРАММ
ОПИСЫВАЕМЫЙ ПРОГРАММНЫЙ КОМПЛЕКС ПОЗВОЛЯЕТ СОЗДАВАТЬ
ПРОГРАММЫ, РАБОТАЮЩИЕ АВТОНОМНО, НА ЭВМ БЕЗ ПОДДЕРЖКИ
ОПЕРАЦИОННОЙ СИСТЕМЫ. ДЛЯ ЭТОГО ПРОГРАММА ДОЛЖНА БЫТЬ
СКОМПОНОВАНА С БИБЛИОТЕКОЙ CALIB ВМЕСТО CXLIB, И В КАЧЕСТВЕ
ГОЛОВНЫХ МОДУЛЕЙ ДОЛЖНЫ ИСПОЛЬЗОВАТЬСЯ ASPEIS ИЛИ ASPNHD
ВМЕСТО SPEIS И SPNHD СООТВЕТСТВЕННО.
ПАКЕТ АВТОНОМНОЙ ПОДДЕРЖКИ, РЕАЛИЗОВАННЫЙ В CALIB,
ПОДДЕРЖИВАЕТ СИСТЕМНЫЙ ТЕРМИНАЛ, ВКЛЮЧЕННЫЙ НА СТАНДАРТНЫЕ
АДРЕСА (НА ВВОД И ВЫВОД) И СИСТЕМНЫЙ ТАЙМЕР (НЕСТАНДАРТНЫМ
ОБРАЗОМ). ИНТЕРФЕЙС С ЛЮБЫМИ ДРУГИМИ УСТРОЙСТВАМИ ДОЛЖЕН
РЕАЛИЗОВЫВАТЬСЯ В ПРИКЛАДНОЙ ПРОГРАММЕ. ЕСТЕСТВЕННО, ЧТО ПРИ
НАПИСАНИИ ПРОГРАММЫ, КОТОРУЮ ПЛАНИРУЕТСЯ ВЫПОЛНЯТЬ КАК
АВТОНОМНУЮ, ДОЛЖЕН ОГРАНИЧИВАТЬСЯ НАБОР ИСПОЛЬЗУЕМЫХ
БИБЛИОТЕЧНЫХ ФУНКЦИЙ: ЗАПРЕЩАЕТСЯ ИСПОЛЬЗОВАТЬ МНОГИЕ ФУНКЦИИ
ВВОДА-ВЫВОДА И ОТЛАДКИ, ЗАПРЕЩАЕТСЯ ИСПОЛЬЗОВАТЬ ЛЮБЫЕ ФУНКЦИИ
БИБЛИОТЕК CRLIB И CTLIB. БОЛЕЕ ПОДРОБНО СМ. "РУКОВОДСТВО
ПРОГРАММИСТА. БИБЛИОТЕКА АВТОНОМНОЙ ПОДДЕРЖКИ".
ПРОГРАММА, ПРЕДНАЗНАЧЕННАЯ ДЛЯ АВТОНОМНОЙ РАБОТЫ, ПРИ
КОМПОНОВКЕ МОЖЕТ БЫТЬ ПОЛУЧЕНА В ФОРМАТЕ "LDA", ЧТО ПОЗВОЛЯЕТ
ЗАГРУЖАТЬ ЕЕ ДЛЯ ИСПОЛНЕНИЯ С ПЕРФОЛЕНТЫ ПРИ ПОМОЩИ
СТАНДАРТНОГО АБСОЛЮТНОГО ЗАГРУЗЧИКА. ДЛЯ ПОЛУЧЕНИЯ ПРОГРАММЫ В
ФОРМАТЕ "LDA" НЕОБХОДИМО УКАЗАТЬ КЛЮЧ "LDA" В КОМАНДЕ МОНИТОРА
"LINK" ИЛИ КЛЮЧ 'L' В КОМАНДНОЙ СТРОКЕ ПРОГРАММЫ "LINK",
НАПРИМЕР:
LINK/LDA PROG,C:ASPNHD,C:CALIB/BOTTOM:2000
ИЛИ
- 14 -
R LINK
PROG=PROG,C:ASPNHD,CALIB/L/B:2000
^C
4. ЗАПУСК ПОДГОТОВЛЕННЫХ ПРОГРАММ
СКОМПОНОВАННАЯ ПРОГРАММА МОЖЕТ ЗАПУЩЕНА ПО КОМАНДАМ "R" ИЛИ
"RUN" МОНИТОРА. ПОСЛЕ СТАРТА ПРОГРАММЫ, ЕСЛИ ЯВНО НЕ ЗАПРЕЩЕНО
(СМ. НИЖЕ), ВЫПОЛНЯЕТСЯ ВВОД И РАЗБОР КОМАНДНОЙ СТРОКИ ДЛЯ
ПРОГРАММЫ. ПРИ РАЗБОРЕ КОМАНДНОЙ СТРОКИ ПРОИЗВОДИТСЯ ЭМУЛЯЦИЯ
ДЕЙСТВИЙ ИНТЕРПРЕТАТОРА КОМАНД "SHELL" ОС UNIX: СОЗДАЕТСЯ
МАССИВ АРГУМЕНТОВ ДЛЯ ПЕРЕДАЧИ ФУНКЦИИ "MAIN" И, ПРИ
НЕОБХОДИМОСТИ, ПРОИСХОДИТ ПЕРЕНАПРАВЛЕНИЕ ВВОДА/ВЫВОДА.
4.1. ВВОД И ОБРАБОТКА КОМАНДНОЙ СТРОКИ
КОМАНДНАЯ СТРОКА В ДАННОМ КОНТЕКСТЕ - СТРОКА СИМВОЛОВ,
ЗАВЕРШЕННАЯ СИМВОЛАМИ <ВК> ИЛИ <ПС>. В КОМАНДНОЙ СТРОКЕ
СИМВОЛЫ ПРОБЕЛА ЯВЛЯЮТСЯ РАЗДЕЛИТЕЛЯМИ АРГУМЕНТОВ. АРГУМЕНТОМ
СЧИТАЕТСЯ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ, НЕ ВКЛЮЧАЮЩАЯ ПРОБЕЛОВ,
ИЛИ ПОСЛЕДОВАТЕЛЬНОСТЬ ПРОИЗВОЛЬНЫХ СИМВОЛОВ, ЗАКЛЮЧЕННАЯ В
ОДИНАРНЫЕ ИЛИ ДВОЙНЫЕ КАВЫЧКИ, НАПРИМЕР, СТРОКА
PARAM1 PARAM2 "A A A" '"E"'
СОДЕРЖИТ 4 АРГУМЕНТА:
PARAM1
PARAM2
A A A
"E"
ЕСЛИ ПРОГРАММА ЗАПУЩЕНА ИЗ КОМАНДНОГО ФАЙЛА, ТО КОМАНДНАЯ
СТРОКА ТОЖЕ БУДЕТ ВЗЯТА ИЗ КОМАНДНОГО ФАЙЛА. ЕСЛИ ПРОГРАММА
ЗАПУЩЕНА С ТЕРМИНАЛА, ТО ОНА ВЫВЕДЕТ НА ТЕРМИНАЛ ПРИГЛАШЕНИЕ
"# " И БУДЕТ ОЖИДАТЬ ВВОДА КОМАНДНОЙ СТРОКИ. ПРИГЛАШЕНИЕ ДЛЯ
ВВОДА КОМАНДНОЙ СТРОКИ МОЖНО ИЗМЕНИТЬ, СМ. НИЖЕ. ЕСЛИ ВЫ
РАБОТАЕТЕ ПОД TS МОНИТОРОМ, ВЫПОЛНЯЮЩИМ КОМАНДУ "SET CCL
UNIX", ТО ПОСЛЕ ВЫПОЛНЕНИЯ ЭТОЙ КОМАНДЫ КОМАНДНУЮ СТРОКУ НУЖНО
ЗАДАВАТЬ В ОДНОЙ СТРОКЕ С ВЫЗОВОМ ПРОГРАММЫ (R И RUN ПРИ ЭТОМ
ПИСАТЬ НЕОБЯЗАТЕЛЬНО); ПРОГРАММА ПОДСКАЗКИ ДЛЯ ВВОДА КОМАНДНОЙ
СТРОКИ НЕ ВЫДАЕТ. ЗАМЕТИМ, ЧТО, ЕСЛИ ЯВНО НЕ ЗАПРЕЩЕНО (СМ.
НИЖЕ), ТО ПЕРЕД ВВОДОМ КОМАНДНОЙ СТРОКИ РАЗРЕШАЕТСЯ ВВОД
СИМВОЛОВ НИЖНЕГО РЕГИСТРА (LOWER CASE).
СУЩЕСТВУЕТ ЕЩЕ ОДНА ВОЗМОЖНОСТЬ ПЕРЕДАТЬ ПРОГРАММЕ
КОМАНДНУЮ СТРОКУ: ЕСЛИ ПРОГРАММА ЗАПУЩЕНА МАКРОКОМАНДОЙ
".CHAIN" ИЗ ДРУГОЙ ПРОГРАММЫ, ТО ПРОГРАММА ВВОДИТ КОМАНДНУЮ
СТРОКУ ИЗ ОБЛАСТИ СВЯЗИ (НАЧИНАЯ С АДРЕСА 0512 И ДО ПЕРВОГО
БАЙТА '\0').
- 15 -
ПРИ РАЗБОРЕ КОМАНДНОЙ СТРОКИ ВЫДЕЛЯЮТСЯ АРГУМЕНТЫ, И
ИНФОРМАЦИЯ О НИХ ПЕРЕДАЕТСЯ ГЛАВНОЙ ФУНКЦИИ ПРОГРАММЫ
ПОЛЬЗОВАТЕЛЯ "MAIN()" ПРИ ПОМОЩИ ДВУХ ПАРАМЕТРОВ, КОТОРЫЕ
ОБЫЧНО НАЗЫВАЮТ "ARGC" И "ARGV". "ARGC" ИМЕЕТ ТИП "INT" И
СОДЕРЖИТ ЧИСЛО АРГУМЕНТОВ, ПЕРЕДАННЫХ ФУНКЦИИ, "ARGV" ИМЕЕТ
ТИП "CHAR **" И ЯВЛЯЕТСЯ УКАЗАТЕЛЕМ НА МАССИВ УКАЗАТЕЛЕЙ НА
АРГУМЕНТЫ (КАЖДЫЙ АРГУМЕНТ ПРИ РАЗБОРЕ ЗАВЕРШАЕТСЯ СИМВОЛОМ
'\0').
ДЛЯ СОВМЕСТИМОСТИ С ОС UNIX ФУНКЦИИ "MAIN()" ПЕРЕДАЕТСЯ НА
ОДИН АРГУМЕНТ БОЛЬШЕ, ЧЕМ ИХ (АРГУМЕНТОВ) ВЫДЕЛЕНО ИЗ
КОМАНДНОЙ СТРОКИ. ДОПОЛНИТЕЛЬНЫЙ АРГУМЕНТ ЯВЛЯЕТСЯ ПЕРВЫМ И В
ДАННОЙ СИСТЕМЕ ОН СОДЕРЖИТ СТРОКУ "XXXX". В ОС UNIX ЭТОТ
АРГУМЕНТ ФОРМИРУЕТСЯ ИНТЕРПРЕТАТОРОМ КОМАНД "SHELL" И, ОБЫЧНО,
СОДЕРЖИТ ИМЯ ПРОГРАММЫ. БЛАГОДАРЯ НАЛИЧИЮ ДОПОЛНИТЕЛЬНОГО
АРГУМЕНТА ПАРАМЕТР "ARGC" НЕ МОЖЕТ БЫТЬ МЕНЬШЕ 1.
ПРИВЕДЕМ ПРИМЕР ПРОГРАММЫ, ПЕЧАТАЮЩЕЙ СВОИ АРГУМЕНТЫ:
MAIN(ARGC, ARGV)
INT ARGC;
CHAR* ARGV[];
[
INT I;
PRINTF("ПРОГРАММА ИМЕЕТ %D АРГУМЕНТОВ:\N",
ARGC);
FOR(I=0; I < ARGC; I++)
PRINTF("АРГ %D = \"%S\"\N", I, ARGV[I]);
]
ПРИ ВЫЗОВЕ ЭТОЙ ПРОГРАММЫ С КОМАНДНОЙ СТРОКОЙ
ABC "DEF GHI" 122 'M M'
ПОЛУЧИМ:
ПРОГРАММА ИМЕЕТ 5 АРГУМЕНТОВ:
АРГ 0 = "XXXX"
АРГ 1 = "ABC"
АРГ 2 = "DEF GHI"
АРГ 3 = "122"
АРГ 4 = "M M"
КОМАНДНАЯ СТРОКА МОЖЕТ СОДЕРЖАТЬ АРГУМЕНТЫ ВИДА "FILE", Т.E. АРГУМЕНТЫ, СОСТОЯЩИЕ ИЗ СИМВОЛА '<' ИЛИ '>' И
СЛЕДУЮЩЕЙ ЗА ЭТИМ СИМВОЛОМ БЕЗ ПРОБЕЛА СПЕЦИФИКАЦИИ ФАЙЛА В
ФОРМАТЕ CSI. ТААКИЕ АРГУМЕНТЫ НЕ ПЕРЕДАЮТСЯ ФУНКЦИИ "MAIN()",
А ВЫЗЫВАЮТ ПЕРЕНАПРАВЛЕНИЕ ВВОДА/ВЫВОДА. ВОТ ЧТО ЭТО ОЗНАЧАЕТ:
ПРИ СТАРТЕ ПРОГРАММЫ ОТКРЫВАЮТСЯ ТРИ ФАЙЛА:
STDIN - ФАЙЛ СТАНДАРТНОГО ВВОДА
STDOUT - ФАЙЛ СТАНДАРТНОГО ВЫВОДА
STDERR - ФАЙЛ СТАНДАРТНОГО ВЫВОДА ОШИБОК
ВСЕ ЭТИ ФАЙЛЫ ПО УМОЛЧАНИЮ СВЯЗАНЫ С ТЕРМИНАЛОМ, ОДНАКО
ФАЙЛЫ СТАНДАРТНОГО ВВОДА И ВЫВОДА МОГУТ БЫТЬ ПЕРЕНАПРАВЛЕНЫ НА
- 16 -
ДРУГИЕ УСТРОЙСТВА ИЛИ ФАЙЛЫ ПРИ ПОМОЩИ СПЕЦИАЛЬНЫХ АРГУМЕНТОВ
КОМАНДНОЙ СТРОКИ: ЕСЛИ В КОМАНДНОЙ СТРОКЕ ПРИСУТСТВУЕТ
АРГУМЕНТ ВИДА "FILE" "STDOUT" БУДЕТ СВЯЗАН С ФАЙЛОМ "FILE".
РАССМОТРИМ СЛЕДУЮЩУЮ ПРОГРАММУ:
# INCLUDE
MAIN()
[
REGISTER C;
WHILE ((C = GETCHAR()) != EOF) PUTCHAR(C);
]
(СМ. "РУКОВОДСТВО ПРОГРАММИСТА. БИБЛИОТЕКИ. РАБОТА С ФАЙЛАМИ"
ДЛЯ БОЛЕЕ ПОДРОБНОЙ ИНФОРМАЦИИ)
ЕСЛИ КОМАНДНАЯ СТРОКА ПУСТА, ТО ЭТА ПРОГРАММА ВВОДИТ
СИМВОЛЫ С ТЕРМИНАЛА И ВЫВОДИТ ИХ ОБРАТНО НА ТЕРМИНАЛ, ОДНАКО,
ЗАДАВ КОМАНДНУЮ СТРОКУ
B.C
ПРИ ПОМОЩИ ЕТОЙ ПРОГРАММЫ МЫ СКОПИРУЕМ ФАЙЛ "A.C" В ФАЙЛ
"B.C".
ПРИ ПЕРЕНАПРАВЛЕНИИ СТАНДАРТНОГО ВЫВОДА В СПЕЦИФИКАЦИИ
ФАЙЛА ("FILE") МОЖЕТ БЫТЬ УКАЗАНА ДЛИНА, ОНА ОБРАБАТЫВАЕТСЯ
ОБЫЧНЫМ ОБРАЗОМ.
4.2. СООБЩЕНИЯ ИСПОЛНЯЮЩЕЙ СИСТЕМЫ ПРИ СТАРТЕ
ПРИ ВЫПОЛНЕНИИ СТАРТОВЫХ ДЕЙСТВИЙ В ФУНКЦИИ $$INIT() МОГУТ
ВОЗНИКАТЬ ОШИБКИ. ПРИ ПОЯВЛЕНИИ ОШИБКИ ВЫВОДИТСЯ ДИАГНОСТИКА И
ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРЕКРАЩАЕТСЯ. ДИАГНОСТИКИ СЛЕДУУЩИЕ (В
СООБЩЕНИЯХ ИСПОЛЬЗОВАНЫ МАЛЫЕ ЛАТИНСКИЕ БУКВЫ, КОТОРЫЕ НА
НЕКОТОРЫХ ТЕРМИНАЛАХ БУДУТ ОТОБРАЖАТЬСЯ КАК БОЛЬШИЕ РУССКИЕ):
"?IO-START-CANNOT PARSE COMMAND LINE"
- ОШИБКА ПРИ РАЗБОРЕ КОМАНДНОЙ СТРОКИ
"?IO-START-NO MEMORY"
- НЕДОСТАТОЧНО ДИНАМИЧЕСКОЙ ПАМЯТИ
"?IO-START-CANNOT OPEN STANDARD INPUT "FILE", CODE = DD."
ОШИБКА ОТКРЫТИЯ ФАЙЛА "FILE" ПРИ ПЕРЕНАПРАВЛЕНИИ
ФАЙЛА СТАНДАРТНОГО ВВОДА. КОД ОШИБКИ DD.
"?IO-START-CANNOT OPEN STANDARD OUTPUT "FILE", CODE = DD."
ОШИБКА ОТКРЫТИЯ ФАЙЛА "FILE" ПРИ ПЕРЕНАПРАВЛЕНИИ
ФАЙЛА СТАНДАРТНОГО ВЫВОДА. КОД ОШИБКИ DD.
ЗНАЧЕНИЕ ОШИБКИ С ОПРЕДЕЛЕННЫМ КОДОМ СМ. ПРИЛОЖЕНИЕ 2.
- 17 -
4.3. УПРАВЛЕНИЕ СТАРТОВЫМИ ДЕЙСТВИЯМИ
СУЩЕСТВУЮТ ВОЗМОЖНОСТЬ ПРИ ПОМОЩИ ОПРЕДЕЛЕНИЯ В ПРОГРАММЕ
НЕКОТОРЫХ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ УПРАВЛЯТЬ ПАРАМЕТРАМИ
ДЕЙСТВИЙ, ВЫПОЛНЯЕМЫХ ПРИ СТАРТЕ ПРОГРАММЫ:
- МОЖНО ПОДАВИТЬ РАЗРЕШЕНИЕ ВВОДА СИМВОЛОВ НИЖНЕГО РЕГИСТРА
(LOWER CASE) ПЕРЕД ВВОДОМ КОМАНДНОЙ СТРОКИ
(РАСПРОСТРАНЯЕТСЯ И НА ДАЛЬНЕЙШЕЕ ВЫПОЛНЕНИЕ ПРОГРАММЫ).
ДЛЯ ЭТОГО НЕОБХОДИМО ОПРЕДЕЛИТЬ В ПРОГРАММЕ
$$NOLC = 1;
- МОЖНО ИЗМЕНИТЬ ВИД ПРИГЛАШЕНИЯ ДЛЯ ВВОДА КОМАНДНОЙ
СТРОКИ, ЯВНО ЗАДАВ "CHAR $$PROM[]="..."; НАПРИМЕР, ДЛЯ
ИЗМЕНЕНИЯ ПРИГРАШЕНИЯ НА "ARGV: " НЕОБХОДИМО ОПРЕДЕЛИТЬ
CHAR $$PROM[]="ARGV: \200";
П_Р_И_М_Е_Ч_А_Н_И_Е. СТРОКА ПОДСКАЗКИ ЗАВЕРШАЕТСЯ СИМВОЛОМ
'\200' ДЛЯ ТОГО, ЧТОБЫ ПРИ ВЫВОДА ПОДСКАЗКИ (ПО ".GTLIN") НЕ
ПРОИЗОШЕЛ ПЕРЕХОД НА НОВУЮ СТРОКУ.
- МОЖНО ЗАПРЕТИТЬ ВВОД КОМАНДНОЙ СТРОКИ (И ПЕЧАТЬ
ПРИГЛАШЕНИЯ). ДЛЯ ЭТОГО НЕОБХОДИМО ОПРЕДЕЛИТЬ В ПРОГРАММЕ
$$NARG = 1;
ПРИ ЗАПРЕЩЕНИИ ВВОДА КОМАНДНОЙ СТРОКИ РЕАКЦИЯ ИСПОЛНИТЕЛЬНОЙ
СИСТЕМ ТОЧНО ТАКАЯ ЖЕ, КАК ПРИ ВВОДЕ ПУСТОЙ КОМАНДНОЙ СТРОКИ.
БОЛЕЕ ПОДРОБНО ОБ УПРАВЛЕНИИ СТАРТОВЫМИ ДЕЙСТИВИЯМИ СМ.
"РУКОВОДСТВО ПРОГРАММИСТА. БИБЛИОТЕКИ".
5. СРЕДСТВА ОТЛАДКИ
ПРИ ОТЛАДКЕ ПРОГРАММ, НАПИСАННЫХ НА ЯЗЫКЕ "СИ", МОЖЕТ
ИСПОЛЬЗОВАТЬСЯ СТАНДАРТНАЯ ТЕХНИКА ОТЛАДКИ: ОТЛАДОЧНАЯ ПЕЧАТЬ,
ОТЛАДЧИК ODT И ДР. КРОМЕ ТОГО, СУЩЕСТВУЕТ РЯД ДОПОЛНИТЕЛЬНЫХ
ФУНКЦИЙ, ЧАСТЬ ИЗ КОТОРЫХ ДОЛЖНА ВКЛЮЧАТЬСЯ ЯВНО, А ЧАСТЬ
ВКЛЮЧАЕТСЯ АВТОМАТИЧЕСКИ, ЕСЛИ ПРИ ТРАНСЛЯЦИИ ХОТЯ БЫ ОДНОГО
МОДУЛЯ (ФАЙЛА) ПРОГРАММЫ БЫЛ ЗАДАН КЛЮЧ '-P' И ХОТЯ БЫ ОДНА
ФУНКЦИЯ ИЗ ТАКОГО МОДУЛЯ БЫЛА ВЫЗВАНА.
ПРИ ИСПОЛЬЗОВАНИИ КЛЮЧА '-P' В ПРОГРАММУ АВТОМАТИЧЕСКИ
ВКЛЮЧАЮСЯ МОДУЛЬ ТАССИРОВКИ И КОНТРОЛЯ СТЕКА ("TRACЕ"), МОДУЛЬ
ПЕРЕХВАТА И ДИАГНОСТИКИ АВАРИЙНЫХ СИНХРОННЫХ ПРЕРЫВАНИЙ
("TRAPS"), ФУНКЦИЯ ПЕЧАТИ "ПРОФИЛЯ" ВЫПОЛНЕНИЯ ПРОГРАММЫ
("$$PROF()") И ФУНКЦИЯ ПЕЧАТИ ПУТИ ВЫЗОВА ("CALLTR()").
КОРОТКО ОПИШЕМ ДЕИСТВИЯ ВКЛЮЧАЕМЫХ МОДУЛЕЙ (БОЛЕЕ ПОДРОБНУЮ
ИНФОРМАЦИЮ СМ. "ФУНКЦИИ СТАНДАРТНОЙ БИБЛИОТЕКИ. СРЕДСТВА
ОТЛАДКИ"):
- 18 -
МОДУЛЬ ТРАССИРОВКИ ("TRACE") ВЫЗЫВАЕТСЯ ПРИ ВХОДЕ В КАЖДУЮ
ФУНКЦИЮ ОТТРАНСЛИРОВАННУЮ С КЛЮЧОМ '-P'. В МОДУЛЕ ВЫПОЛНЯЕТСЯ
ПРОВЕРКА НА ПЕРЕПОЛНЕНИЕ СТЕКА -- ВЫПОЛНЕНИЕ ПРОГРАММЫ
ПРЕРЫВАЕТСЯ С ДИАГНОСТИКОЙ
?IO-TRACE-STACK BELOW 600 OCTAL
ЕСЛИ УКАЗАТЕЛЬ СТЕКА ОПУСТИТСЯ НИЖЕ 0600.
КРОМЕ ТОГО, ЕСЛИ ТРЕБУЕТСЯ, ВЫПОЛНЯЕТСЯ ТРАССИРОВКА: ЕСЛИ
ГЛОБАЛЬННАЯ ПЕРЕМЕННАЯ $$FLOW УКАЗЫВАЕТ НА ДЕСКРИПТОР ФАЙЛА,
ТО ИМЯ ВЫЗВАННОЙ ФУНКЦИИ, АДРЕС ВОЗВРАТА В ВЫЗВАВШУЮ ФУНКЦИЮ И
ЗНАЧЕНИЕ R5 - УКАЗАТЕЛЯ ЛОКАЛЬНОЙ СРЕДЫ - ВЫВОДЯТСЯ В
УКАЗАННЫЙ ФАЙЛ ДЛЯ ВСЕХ ФУНКЦИЙ, ОТТРАНСЛИРОВАННЫХ С КЛЮЧОМ
'-P', В СЛЕДУЮЩЕМ ФОРМАТЕ:
FUN_NAMECALLERENVIRONMENT
МОДУЛЬ TRAPS ПЕРЕХВАТЫВАЕТ И ДИАГНОСТИРУЕТ АВАРИЙНЫЕ
СИНХРОННЫЕ ПРЕРЫВАНИЯ ПРОГРАММЫ (ПО ВЕКТОРАМ 4, 10, 14, 20,
34, 250).
ПРИ ПРЕРЫВАНИИ СНАЧАЛА НЕПОСРЕДСТВЕННО НА ТЕРМИНАЛ ВЫВОДИТСЯ
ДИАГНОСТИКА И ДАМП РЕГИСТРОВ, ПОСЛЕ ЧЕГО ВЫЗЫВАЕТСЯ ERROR().
ДИАГНОСТИКИ, ВЫДАВАЕМЫЕ МОДУЛЕМ TRAPS, СЛЕДУЮЩИЕ (УКАЗАН
ПЕРЕВОД И, В СКОБКАХ, ВОСЬМЕРИЧНОЕ ЗНАЧЕНИЕ ВЕКТОРА
ПРЕРЫВАНИЯ):
?CC-F-ODD OR NONEXISTENT ADDRESS TRAP
ПРЕРЫВАНИЕ ПО ОТСУТСТВУЮЩЕМУ ИЛИ НЕДОПУСТИМОМУ АДРЕСУ
?CC-F-ILLEGAL INSTRUCTION
ПРЕРЫВАНИЕ ПО НЕДОПУСТИМОЙ ИНСТРУКЦИИ (10)
?CC-F-BPT TRAP OR C RUN-TIME LIBRARY ERROR
BPT ПРЕРЫВАНИЕ -- ВОЗМОЖНО, ОШИБКА ИСПОЛЬЗОВАНИЯ ФУНК-
ЦИИ БИБЛИОТЕКИ ЯЗЫКА "СИ" (14)
?CC-F-ILLEGAL IOT
НЕДОПУСТИМОЕ IOT ПРЕРЫВАНИЕ (20)
?CC-F-TRAP TRAP OR FORTRAN ERROR SIGNAL
TRAP ПРЕРЫВАНИЕ -- ВОЗМОЖНО, СИГНАЛ ОШИБКИ, ВЫДАВАЕМЫЙ
ФУНКЦИЯМИ, НАПИСАННЫМИ НА ЯЗЫКЕ FRORTRAN (34)
?CC-F-МEMORY PROTECT VIOLATION
ПРЕРЫВАНИЕ ПО НАРУШЕНИЮ ЗАЩИТЫ ПАМЯТИ (ОТ ДИСПЕТЧЕРА
ПАМЯТИ) (250)
ФУНКЦИЯ $$PROF() НЕЯВНО ВЫЗЫВАЕТСЯ ПРИ НОРМАЛЬНОМ ИЛИ
АВАРИЙНОМ ВЫХОДЕ ИЗ ПРОГРАММЫ, В КОТОРОЙ БЫЛИ ИСПОЛЬЗОВАНЫ
ФУНКЦИИ, ОТТРАНСЛИРОВАННЫЕ С КЛЮЧОМ '-P'.
- 19 -
$$PROF() ВЫВОДИТ В ФАЙЛ (ПО УМОЛЧАНИЮ "PROFIL.OUT") "ПРОФИЛЬ"
ВЫПОЛНЕНИЯ ПРОГРАММЫ -- ДЛЯ ВСЕХ ФУНКЦИЙ, ОТТТРАНСЛИРОВАННЫХ С
КЛЮЧОМ '-P', ВЫВОДИТСЯ ИМЯ ФУНККЦИИ И КОЛИЧЕСТВО ЕЕ ВЫЗОВОВ ВО
ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ (ДЕСЯТИЧНОЕ).
ФУНКЦИЯ CALLTR() ВЫЗЫВАЕТСЯ, ЕСЛИ ПРОГРАММА,
ОТТРАНСЛИРОВАННАЯ С КЛЮЧОМ 'P', ЗАВЕРШАЕТСЯ АВАРИЙНО ИЛИ
ВЫЗОВОМ ФУНКЦИИ ERROR(). ПРИ ЭТОМ CALLTR() ВЫВОДИТ В STDERR
ПУТЬ ВЫЗОВА (ПОСЛЕДОВАТЕЛЬНОСТЬ ИМЕН ФУНКЦИЙ, НАХОДЯЩИХСЯ В
ЦЕПОЧКЕ ВЫЗОВА) НАЧИНАЯ С ФУНКЦИИ MAIN(). ПУТЬ ВЫЗОВА
ПЕЧАТАЕТСЯ В СЛЕДУЮЩЕМ ВИДЕ:
[ MAIN SUB1 SUB2 ]
ПОСЛЕДНИМ В ПУТИ ВЫЗОВА УКАЗАНО ИМЯ ФУНКЦИИ, ВЫЗВАВШЕЙ
ЗАВЕРШЕНИЕ ПРОГРАММЫ.
ЕСЛИ ФУНКЦИЯ, НАХОДЯЩАЯСЯ В ЦЕПОЧКЕ ВЫЗОВОВ, СКОМПИЛИРОВАНА
БЕЗ УКАЗАНИЯ КЛЮЧА 'P', ОНА БУДЕТ ОТОБРАЖЕНА В ПУТИ ВЫЗОВА КАК
, ГДЕ "NNNNN" - ВОСЬМЕРИЧНЫЙ АДРЕС ВХОДА В ДАННУЮ
ФУНКЦИЮ. ФУНКЦИЯ CALLTR() МОЖЕТ БЫТЬ ТАКЖЕ ВЫЗВАНА ЯВНО.
КРОМЕ ПЕРЕЧИСЛЕННЫХ ФУНКЦИЙ, СУЩЕСТВУЮТ ФУНКЦИИ, КОТОРЫЕ
ПРОЛЕЗНЫ ПРИ ОТЛАДКЕ ПРОГРАММЫ И ДОЛЖНЫ БЫТЬ ВЫЗВАНЫ ЯВНО.
ЭТО:
- ABORT - АВАРИЙНО ЗАВЕРШИТЬ ПРОГРАММУ
- $$BPT - ВЫПОЛНИТЬ BPT
- MSG - ВЫВЕСТИ СООБШЕНИЕ НЕПОСРЕДСТВЕННО НА ТЕРМИНАЛ
- CALLER - ПОЛУЧИТЬ ИМЯ ВЫЗВАВШЕЙ ФУНКЦИИ
- MEMDMP, REGDMP - ПОЛУЧИТЬ ДАМП ПАМЯТИ, СТЕКА ИЛИ
РЕГИСТРОВ.
БОЛЕЕ ПОДРОБНУЮ ИНФОРМАЦИЮ СМ. "ФУНКЦИИ СТАНДАРТНОЙ
БИБЛИОТЕКИ. СРЕДСТВА ОТЛАДКИ".
6. СООБЩЕНИЯ ОПЕРАТОРУ
В НАСТОЯЩЕЙ ГЛАВЕ ОПИСАНЫ СООБЩЕНИЯ КОМПИЛЯТОРА, КОТОРЫЕ
МОГУТ БЫТЬ ПОЛУЧЕНЫ ОПЕРАТОРОМ ВО ВРЕМЯ РАБОТЫ. НЕКОТОРЫЕ
СООБЩЕНИЯ ЗАКАНЧИВАЮТСЯ СТРОКОЙ, ОБОЗНАЧЕННОЙ В НАСТОЯЩЕМ
ОПИСАНИИ КАК "ERRMES" - "ПРИЧИНА", В КОТОРОЙ ОПИСЫВАЕТСЯ
ПРИЧИНА ОШИБКИ. ТЕКСТЫ ВОЗМОЖНЫХ ПРИЧИН И ИХ ПЕРЕВОД СМ.
ПРИЛОЖЕНИЕ 2.
В ОПИСАНИИ ПОСЛЕ КАЖДОГО СООБЩЕНИЯ ЧЕРЕЗ ДЕФИС В СКОБКАХ
УКАЗАНА СТАДИЯ КОМПИЛЯЦИИ, НА КОТОРОЙ ГЕНЕРИРУЕТСЯ ДАННОЕ
СООБЩЕНИЕ. ОБОЗНАЧЕНИЯ СЛЕДУЮЩИЕ:
CC - ГОЛОВНАЯ СТАДИЯ
CPP - СТАДИЯ ПРЕПРОЦЕССОРА
C0 - ПЕРВЫЙ ПРОХОД СТАДИИ КОМПИЛЯЦИИ
- 20 -
C1 - ВТОРОЙ ПРОХОД СТАДИИ КОМПИЛЯЦИИ
C2 - СТАДИЯ ОПТИМИЗАЦИИ
AS - СТАДИЯ АССЕМБЛЕРА
СООБЩЕНИЯМ, ВЫДАННЫМ НА СТАДИЯХ "CPP" И "C0" ПРЕДШЕСТВУЕТ
ИМЯ ФАЙЛА И НОМЕР СТРОКИ В ФАЙЛЕ, РАЗДЕЛЕННЫЕ МЕЖДУ СОБОЙ И
ОТДЕЛЕННЫЕ ОТ СООБЩЕНИЯ СИМВОЛАМИ ':'. СООБЩЕНИЯМ, ВЫДАННЫМ НА
СТАДИИ "C1" ПРЕДШЕСТВУЕТ НОМЕР СТРОКИ В ФАЙЛЕ, ОТДЕЛЕННЫЙ ОТ
СООБЩЕНИЯ СИМВОЛОМ ':'.
СООБЩЕНИЯ ВЫВОДЯТСЯ С ИСПОЛЬЗОВАНИЕМ БУКВ НИЖНЕГО РЕГИСТРА
(LOWER CASE), КОТОРЫЕ БУДУТ ОТОБРАЖАТЬСЯ КАК РУССКИЕ БУКВЫ НА
НЕКОТОРЫХ ТЕРМИНАЛАХ.
СООБЩЕНИЯ ПРИВЕДЕНЫ В АЛФАВИТНОМ ПОРДКЕ, ПРИЧЕМ ИМЯ ФАЙЛА И
НОМЕР СТРОКИ, КОТОРЫЕ МОГУТ ПРЕДШЕСТВОВАТЬ СООБЩЕНИЮ (СМ.
ВЫШЕ) НЕ УЧИТЫВАЮТСЯ. МАЛЫЕ И БОЛЬШИЕ БУКВЫ В ОПИСАНИИ НЕ
РАЗЛИЧАЮТСЯ, ИМЯ СТАДИИ КОМПИЛЯЦИИ В ОПИСАНИИ ПРЕДСТАВЛЕНО КАК
"XX", ИМЯ КАКОГО-ЛИБО ОБ'ЕКТА (НАПРИМЕР ПЕРЕМЕННОЙ) - КАК
A"NAME", ПРИЧЕМ ЗАКЛЮЧЕНО В КАВЫЧКИ.
ТЕКСТЫ СООБЩЕНИЙ СМ. ПРИЛОЖЕНИЕ 1.
- 21 -
ПРИЛОЖЕНИЕ 1. ТЕКСТЫ ДИАГНОСТИЧЕСКИХ СООБЩЕНИЙ
КОМПИЛЯТОРА
(WARNING ONLY) - (C0)
- ПРЕДЫДУЩЕЕ СООБЩЕНИЕ БЫЛО ПРЕДУПРЕЖДЕНИЕМ, А НЕ ОШИБКОЙ.
0-LENGTH ROW: NAME - (C0)
- ОБ'ЕКТ "NAME" ИМЕЕТ ДЛИНУ 0. (*)
?CC-F-BAD INPUT FILENAME "FILNAM" - (CC)
- НЕДОПУСТИМОЕ ИМЯ ВХОДНОГО ФАЙЛА.
?CC-F-BAD OUTPUT FILENAME "FILNAM" - (CC)
- НЕДОПУСТИМОЕ ИМЯ ВЫХОДНОГО ФАЙЛА.
?CC-F-CAN'T OPEN INPUT FILE "FILNAM": ERRMES - (CC)
- НЕ УДАЕТСЯ ОТКРЫТЬ ВХОДНОЙ ФАЙЛ: ПРИЧИНА.
?CC-F-NO INPUT FILE - (CC)
- НЕТ ИМЕНИ ВХОДНОГО ФАЙЛА.
?CC-F-NO OUTPUT FILE NAME - (CC)
- НЕТ ИМЕНИ ВЫХОДНОГО ФАЙЛА (ХОТЯ ЗАДАН КЛЮЧ 'O').
?CC-F-TOO MANY INPUT FILES - (CC)
- БОЛЕЕ ОДНОГО ИМЕНИ ВХОДНОГО ФАЙЛА.
?CC-F-TOO MANY OUTPUT FILES - (CC)
- БОЛЕЕ ОДНОГО КЛЮЧА 'O'.
?CC-F-UNKNOWN SWITCH 'X' - (CC)
- НЕДОПУСТИМЫЙ КЛЮЧ 'X' ('X' - ЭТОТ КЛЮЧ).
?CC-I-I'M DO NOTHING AS YOU LIKE - (CC)
- БЫЛИ СОВМЕСТНО ЗАДАНЫ КЛЮЧИ 'M', 'C' И 'S', НЕТ НИ ОДНОЙ
АКТИВНОЙ СТАДИИ.
?XX-F-CAN'T CLOSE OUTPUT FILE "FILNAM": ERRMES - (CC)
- ОШИБКА НА СТАДИИ "XX" ПРИ ЗАКРЫТИИ ВЫХОДНОГО ФАЙЛА
"FILNAM": ПРИЧИНА.
?XX-F-CAN'T CLOSE TOF "FILNAM": ERRMES - (CC)
- ОШИБКА НА СТАДИИ "XX" ПРИ ЗАКРЫТИИ ПРОМЕЖУТОЧНОГО ФАЙЛА
"FILNAM": ПРИЧИНА.
?XX-F-CAN'T OPEN TIF "FILNAM": ERRMES - (CC)
- ОШИБКА НА СТАДИИ "XX" ПРИ ОТКРЫТИИ ПРОМЕЖУТОЧНОГО
ВХОДНОГО ФАЙЛА "FILNAM": ПРИЧИНА.
?XX-F-CAN'T OPEN TOF "FILNAM": ERRMES - (CC)
- ОШИБКА НА СТАДИИ "XX" ПРИ ОТКРЫТИИ ПРОМЕЖУТОЧНОГО
ВЫХОДНОГО ФАЙЛА "FILNAM": ПРИЧИНА.
BAD FORMAL: "NAME" - (CPP)
- НЕДОПУСТИМЫЙ ФОРМАЛЬНЫЙ ПАРАМЕТР "NAME" ПРИ ОПРЕДЕЛЕНИИ
МАКРОСА С АРГУМЕНТАМИ.
BAD FUNC. STORAGE CLASS - (C0)
- НЕДОПУСТИМЫЙ КЛАСС ПАМЯТИ (AUTO) ПРИ ОПИСАНИИ ФУНКЦИИ.
BAD INCLUDE SYNTAX - (CPP)
- ОШИБКА В ОПЕРАТОРЕ #INCLUDE - АРГУМЕНТ ИМЕЕТ ВИД НЕ
"FILE" И НЕ .
BAD STRUCTURE/UNION/ENUM NAME - (C0)
- НЕДОПУСТИМОЕ ИМЯ ДЛЯ СТРУКТУРЫ, ОБ'ЕДИНЕНИЯ ИЛИ
ПЕРЕЧИСЛЕНИЯ.
BAD TYPE FOR FIELD - (C0)
- НЕДОПУСТИМЫЙ (НЕ INT ИЛИ UNSIGNED) ТИП ДЛЯ БИТОВОГО ПОЛЯ.
BINARY EXPRESSION BOTCH - (C1),
BOTCH IN OUTCODE - (C0)
- СБОЙ ИЛИ ОШИБКА В КОМПИЛЯТОРЕ.
BREAK/CONTINUE ERROR - (C0)
- ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА "BREAK" ИЛИ "CONTINUE" В
НЕПОДХОДЯЩЕМ КОНТЕКСТЕ - ВНЕ ТЕЛА ЦИКЛА ДЛЯ "CONTINUE" И
- 22 -
ВНЕ ТЕЛА ЦИКЛА ИЛИ ПЕРЕКЛЮЧАТЕЛЯ ДЛЯ "BREAK".
C ERROR: CONST - (C1)
- В КОНСТАНТНОМ ВЫРАЖЕНИИ ПРИМЕНЕНА НЕРЕАЛИЗОВАННАЯ
ОПЕРАЦИЯ (ПРИ ВЫПОЛНЕНИИ ТАКОЙ ОПЕРАЦИИ С ПЕРЕМЕННЫМИ ВЫ
ПОЛУЧИТЕ "NO CODE TABLE FOR...").
C OPTIMIZER: OUT OF SPACE - (C2)
- ОПТИМИЗАТОРУ НЕ ХВАТИЛО ПАМЯТИ. РАЗБЕЙТЕ ПРОГРАММУ НА
БОЛЕЕ МЕЛКИЕ ФУНКЦИИ (РАЗБИЕНИЕ ФАЙЛА НА ЧАСТИ
НЕОБЯЗАТЕЛЬНО).
C2: SORRY, INPUT LINE TOO LONG - (C2)
- СЛИШКОМ ДЛИННАЯ ВХОДНАЯ СТРОКА ДЛЯ ОПТИМИЗАТОРА.
CALL OF NON-FUNCTION - (C0)
- ОБРАШЕНИЕ КАК К ФУНКЦИИ К ОБ'ЕКТУ (ПЕРЕМЕННОЙ), КОТОРЫЙ
ФУНКЦИЕЙ НЕ ЯВЛЯЕТСЯ, НАПРИМЕР ОБРАЩЕНИЕ К ЭЛЕМЕНТУ
МАССИВА КАК К FOO(1), А НЕ КАК FOO[1].
CAN'T FIND INCLUDE FILE "FILNAM" - (CPP)
- НЕ НАЙДЕН ФАЙЛ "FILNAM", УКАЗАННЫЙ В ОПЕРАТОРЕ #INCLUDE.
CASE NOT IN SWITCH - (C0)
- КОНСТРУКЦИЯ "CASE" УПОТРЕБЛЕНА НЕ В ТЕЛЕ ПЕРЕКЛЮЧАТЕЛЯ.
COMPILER BOTCH: CALL - (C1),
COMPILER ERROR (LENGTH) - (C1),
COMPILER ERROR: PNAME - (C1)
- СБОЙ ИЛИ ОШИБКА В КОМПИЛЯТОРЕ.
COMPOUND STATEMENT REQUIRED - (C0)
- ТЕЛОМ ФУНКЦИИ ДОЛЖЕН БЫТЬ СОСТАВНОЙ ОПЕРАТОР (ГРУППА
ОПЕРАТОРОВ В ФИГУРНЫХ СКОБКАХ): ПОСЛЕ ОПРЕДЕЛЕНИЯ ФУНКЦИИ
НЕТ ОТКРЫВАЮЩЕЙСЯ ФИГУРНОЙ СКОБКИ В НАДЛЕЖАЩЕМ МЕСТЕ.
CONFLICT IN STORAGE CLASS - (C0)
- НЕСОВМЕСТИМЫЕ КЛАССЫ ПАМЯТИ ПРИ ОПИСАНИИ (НАПРИМЕР EXTERN
REGISTER).
CONSTANT REQUIRED - (C0)
- В ДАННОМ КОНТЕКСТЕ (НАПРИМЕР ПРИ ИНИЦИАЛИЗАЦИИ ИЛИ В
КОНСТРУКЦИИ "CASE") НЕОБХОДИМА КОНСТАНТА ИЛИ КОНСТАНТНОЕ
ВЫРАЖЕНИЕ.
DECLARATION SYNTAX - (C0)
- НЕВЕРНЫЙ СИНТАКСИС ПРИ ОПИСАНИИ.
DEFAULT NOT IN SWITCH - (C0)
- КОСТРУКЦИЯ "DEFAULT" УПОТРЕБЛЕНА НЕ В ТЕЛЕ ПЕРЕКЛЮЧАТЕЛЯ
DISALLOWED CONVERSION - (C0)
- НЕДОПУСТИМОЕ ПРЕОБРАЗОВАНИЕ ТИПА.
DIVIDE CHECK - (C0, C1)
- ДЕЛЕНИЕ НА КОНСТАНТУ 0.
DUPLICATE CASE (SWVAL) - (C1)
- В ТЕЛЕ ПЕРЕКЛЮЧАТЕЛЯ ПРИСУТСТВУЮТ БОЛЕЕ ОДНОЙ КОНСТРУКЦИИ
"CASE" С ОДИНАКОВЫМИ ЗНАЧЕНИЯМИ "SWVAL".
EXCESSIVE -I FILE (DEV) IGNORED - (CPP)
- СЛИШКОМ МНОГО ДОПОЛНИТЕЛЬНЫХ УСТРОЙСТВ ДЛЯ ПОИСКА ФАЙЛОВ
ОПИСАНИЙ, ЗАДАВАЕМЫХ ПРИ ПОМОЩИ КЛЮЧЕЙ 'I'. УСТРОЙСТВО
"DEV" ИГНОРИРУЕТСЯ.
EXPRESSION INPUT BOTCH - (C1)
- СБОЙ ИЛИ ОШИБКА В КОМПИЛЯТОРЕ.
EXPRESSION OVERFLOW - (C0)
- СЛИШКОМ СЛОЖНОЕ ВЫРАЖЕНИЕ - ПЕРЕПОЛНЕНИЕ ВНУТРЕННЕГО
СТЕКА ПРИ РАЗБОРЕ. УПРОСТИТЕ ВЫРАЖЕНИЕ, ЯВНО ИСПОЛЬЗУЯ
ПРОМЕЖУТОЧНЫЕ ПЕРЕМЕННЫЕ.
EXPRESSION SYNTAX - (C0)
- ОШИБОЧНЫЙ СИНТАКСИС В ВЫРАЖЕНИИ. ОШИБКА, КАК ПРАВИЛО, В
- 23 -
УКАЗАННОЙ СТРОКЕ.
EXTERNAL DEFINITION SYNTAX - (C0)
- ОШИБОЧНЫЙ СИНТАКСИС ПРИ ОПРЕДЕЛЕНИИ ВНЕШНИХ ДАННЫХ.
ОШИБКА ЧАСТО ПОЯВЛЯЕТСЯ ПРИ НАЛИЧИИ ЛИШНИХ ЗАКРЫВАЮЩИХ
ФИГУРНЫХ СКОБОК.
FIELD TOO LONG - (C0)
- БИТОВОЕ ПОЛЕ ИМЕЕТ СЛИШКОМ БОЛЬШУЮ ДЛИНУ.
FLOATING % NOT DEFINED - (C1)
- ДЛЯ ОПЕРАНДОВ ТИПА FLOAT И DOUBLE ОПЕРАЦИЯ '%'
НЕОПРЕДЕЛЕНА.
IF-LESS ELSE - (CPP)
- ОПЕРАТОР #ELSE, ДЛЯ КОТОРОГО ОТСУТСТВУЕТ ПРЕДШЕСТВУЮЩЕЕ
#IF ИЛИ #IFDEF.
IF-LESS ENDIF - (CPP)
- ОПЕРАТОР #ENDIF, ДЛЯ КОТОРОГО ОТСУТСТВУЕТ ПРЕДШЕСТВУЮЩЕЕ
#IF ИЛИ #IFDEF.
ILLEGAL # - (C0)
- НЕДОПУСТИМАЯ СТРОКА, НАЧИНАЮЩАЯСЯ С '#', ПОПАЛА НА ВХОД
СТАДИИ КОМПИЛЯТОРА.
ILLEGAL CONDITIONAL - (C0)
- НЕДОПУСТИМЫЙ ОПЕРАТОР '?' - ПОСЛЕ НЕГО ОТСУТСТВУЕТ ':'.
ILLEGAL CONVERSION - (C0)
- НЕДОПУСТИМОЕ ПРЕОБРАЗОВАНИЕ ТИПА.
ILLEGAL ENUM CONSTANT FOR "NAME" - (C0)
- ПРИ ОПРЕДЕЛЕНИИ ПЕРЕЧИСЛЕНИЯ ДЛЯ КОМПОНЕНТА "NAME"
ИСПОЛЬЗУЕТСЯ НЕДОПУСТИМЫЙ ИНИЦИАЛИЗАТОР (НЕ КОНСТАНТА ИЛИ
КОНСТАНТА НЕ ТИПА INT).
ILLEGAL ENUMERATION "NAME" - (C0)
- НЕДОПУСТИМОЕ ПЕРЕЧИСЛЕНИЕ "NAME".
ILLEGAL INDIRECTION - (C0, C1)
- НЕДОПУСТИМАЯ КОСВЕННАЯ АДРЕСАЦИЯ - ПОПЫТКА ИСПОЛЬЗОВАТЬ
(ОПЕРАТОРОМ '*') КАК УКАЗАТЕЛЬ ПЕРЕМЕННУЮ, КОТОРАЯ
УКАЗАТЕЛЕМ НЕ ЯВЛЯЕТСЯ.
ILLEGAL INITIALIZATION - (C1)
- НЕДОПУСТИМАЯ ИНИЦИАЛИЗАЦИЯ.
ILLEGAL LVALUE - (C0)
- НЕДОПУСТИМОЕ L-ЗНАЧЕНИЕ: ПОПЫТКА ВЗЯТЬ (ОПЕРАТОРОМ '&')
АДРЕС КОНСТРУКЦИИ, НЕ ИМЕЮЩЕЙ АДРЕСА, НАПРИМЕР ВЫРАЖЕНИЯ
ИЛИ КОНСТАНТЫ.
ILLEGAL MACRO NAME - (CPP)
- НЕДОПУСТИМОЕ ИМЯ ДЛЯ МАКРООПРЕДЕЛЕНИЯ.
ILLEGAL OPERATION ON STRUCTURE - (C1)
- ПОПЫТКА ВЫПОЛНИТЬ НАД СТРУКТУРАМИ НЕОПРЕДЕЛЕННУЮ
ОПЕРАЦИЮ. (*)
ILLEGAL STORAGE CLASS - (C0)
- НЕДОПУСТИМЫЙ КЛАСС ПАМЯТИ (ИСПОЛЬЗОВАНИЕ КЛАССОВ ПАМЯТИ
"AUTO" И "REGISTER" ПРИ ВНЕШНЕМ ОПРЕДЕЛЕНИИ).
ILLEGAL STRUCTURE OPERATION - (C1)
- НЕДОПУСТИМАЯ ОПЕРАЦИЯ СО СТРУКТУРОЙ (ПРИ ВОЗВРАТЕ ИЗ
ФУНКЦИИ СТРУКТУРЫ ПО ЗНАЧЕНИЮ). (*)
ILLEGAL STRUCTURE REF - (C0)
- НЕДОПУСТИМАЯ ССЫЛКА НА ЭЛЕМЕНТ СТРУКТУРЫ.
ILLEGAL TYPE OF OPERAND - (C0)
- НЕДОПУСТИМЫЙ ТИП ОПЕРАНДА (ОПЕРАНДОВ) ДЛЯ ДАННОЙ ОПЕРАЦИИ
(НАПРИМЕР В ОПЕРАЦИИ "A <<= D", ГДЕ 'D' ИМЕЕТ ТИП
"FLOAT").
- 24 -
ILLEGAL USE OF REGISTER - (C1)
- НЕДОПУСТИМОЕ ИСПОЛЬЗОВАНИЕ РЕГИСТРОВОЙ ПЕРЕМЕННОЙ
(НАПРИМЕР, ВЗЯТИЕ АДРЕСА).
ILLEGAL USE OF TYPE - (C0)
- НЕДОПУСТИМОЕ ИСПОЛЬЗОВАНИЕ ТИПА.
ILLEGAL USE OF TYPE NAME - (C0)
- НЕДОПУСТИМОЕ ИСПОЛЬЗОВАНИЕ ИМЕНИ ТИПА.
INAPPROPRIATE 'ELSE' - (C0)
- ОБНАРУЖЕН "ELSE", ДЛЯ КОТОРОГО ОТСУТСТВУЕТ "IF".
INAPPROPRIATE PARAMETERS - (C0)
- НЕСООТВЕТСТВУЮЩИЕ ПАРАМЕТРЫ ПРИ ВЫЗОВЕ ФУНКЦИИ. (*)
INCOMPATIBLE STRUCTURES - (C0)
- НЕСОВПАДАЮЩИЕ СТРУКТУРЫ (НАПРИМЕР ПРИ ПРИСВАИВАНИИ ИЛИ
ВОЗВРАТЕ ИЗ ФУНКЦИИ СТРУКТУРЫ ПО ЗНАЧЕНИЮ).
INTERMEDIATE FILE ERROR - (C1)
- ОШИБКА ЗАПИСИ В ПРОМЕЖУТОЧНЫЙ ФАЙЛ.
LONG CHARACTER CONSTANT - (C0)
- СЛИШКОМ ДЛИННАЯ (БОЛЕЕ ДВУХ СИМВОЛОВ) СИМВОЛЬНАЯ
КОНСТАНТА.
LVALUE REQUIRED - (C0)
- ТРЕБУЕТСЯ L-ЗНАЧЕНИЕ: ИСПОЛЬЗОВАНИЕ УКАЗАТЕЛЯ В
КОНТЕКСТЕ, ГДЕ ЭТО ОЧЕВИДНО БЕССМЫСЛЕННО, И ГДЕ, СКОРЕЕ
ВСЕГО, ТРЕБУЕТСЯ ОБ'ЕКТ, НА КОТОРЫЙ УКАЗЫВАЕТ ЭТОТ
УКАЗАТЕЛЬ, НАПРИМЕР: P++ = C; ВМЕСТО *P++ = C;
MISPLACED 'LONG' - (C0)
- ТИП "LONG" ИСПОЛЬЗОВАН НЕКОРРЕКТНО (НАПРИМЕР "LONG
DOUBLE").
MISPLACED 'UNSIGNED' - (C0)
- ТИП "UNSIGNED" ИСПОЛЬЗОВАН НЕКОРРЕКТНО (НАПРИМЕР
"UNSIGNED FLOAT").
MISSING ']' - (C0)
- ОТСУТСТВУЕТ (ОДНА ИЛИ БОЛЕЕ) ЗАКРЫВАЮЩАЯ ФИГУРНАЯ СКОБКА.
MORE THAN 1 'DEFAULT' - (C0)
- В ПЕРЕКЛЮЧАТЕЛЕ ОПРЕДЕЛЕНО БОЛЕЕ ОДНОЙ КОНСТРУКЦИИ
"DEFAULT".
"NAME" MULTIPLY DEFINED - (C0)
- ИМЯ "NAME" МНОГОКРАТНО ОПРЕДЕЛЕНО (ОДИНАКОВО).
"NAME" REDECLARED - (C0)
- ИМЯ "NAME" ПЕРЕОПРЕДЕЛЕНО (ОПРЕДЕЛЕНО НЕОДИНАКОВО).
"NAME" REDEFINED - (CPP)
- ИМЯ "NAME" ПЕРЕОПРЕДЕЛЕНО ОПЕРАТОРОМ "#DEFINE" В
ПРЕПРОЦЕССОРЕ (ПРЕДУПРЕЖДЕНИЕ).
"NAME" UNDEFINED - (C0)
- ИМЯ "NAME" НЕОПРЕДЕЛЕНО.
"NAME" UNDEFINED; FUNC. "FNAME" - (C0)
- ИМЯ "NAME" В ФУНКЦИИ "FNAME" НЕОПРЕДЕЛЕНО.
"NAME": ACTUALS TOO LONG - (CPP)
- ОБЩАЯ ДЛИНА СПИСКА ФАКТИЧЕСКИХ ПАРАМЕТРОВ МАКРОСА С
АРГУМЕНТАМИ СЛИШКОМ ВЕЛИКА. ПЕРЕПОЛНЕНИЕ ПРОИЗОШЛО ПРИ
ВВОДЕ ПАРАМЕТРА "NAME".
"NAME": ARGUMENT MISMATCH -(CPP)
- МАКРОС "NAME" ПРИ РАСШИРЕНИИ ИМЕЕТ ФАКТИЧЕСКИХ ПАРАМЕТРОВ
БОЛЬШЕ ИЛИ МЕНЬШЕ, ЧЕМ ЧИСЛО ФОРМАЛЬНЫХ ПАРАМЕТРОВ ПРИ
ОПРЕДЕЛЕНИИ (ПРЕДУПРЕЖДЕНИЕ, ЛИШНИЕ ПАРАМЕТРЫ
ИГНОРИРУЮТСЯ, НЕДОСТАЮЩИЕ ЗАМЕНЯЮТСЯ ПУСТЫМИ).
"NAME": MACRO RECURSION - (CPP)
- ВОЗНИКЛА РЕКУРСИЯ ПРИ РАСШИРЕНИИ МАКРОСА "NAME"
- 25 -
"NAME": TOO MUCH PUSHBACK - (CPP)
- СЛИШКОМ БОЛЬШАЯ ВЛОЖЕННОСТЬ ПРИ РАСКРЫТИИ
МАКРООПРЕДЕЛЕНИЯ В ПРЕПРОЦЕССОРЕ (ПЕРЕПОЛНЕНИЕ НА
МАКРООПРЕДЕЛЕНИИ "NAME").
"NAME": UNTERMINATED MACRO CALL - (CPP)
- КОНЕЦ ФАЙЛА ОБНАРУЖЕН В МАКРОСЕ "NAME" (ПРИ ЧТЕНИИ СПИСКА
ФАКТИЧЕСКИХ ПАРАМЕТРОВ).
NAMES "NAME1" AND "NAME2" CONFLICT - (C0)
- ГЛОБАЛЬНЫЕ ИМЕНА "NAME1" И "NAME2" РАЗЛИЧАЮТСЯ, НО
СОВПАДАЮТ В ПЕРВЫХ 6 СИМВОЛАХ.
NO AUTO. AGGREGATE INITIALIZATION - (C0)
- НЕДОПУСТИМА ИНИЦАЛИЗАЦИЯ СОСТАВНЫХ ЭЛЕМЕНТОВ (СТРУКТУР,
МАССИВОВ), ИМЕЮЩИХ ТИП AUTO.
NO CODE TABLE FOR OP CODE - (C1)
- В C1 НЕ РЕАЛИЗОВАН ОПЕРАТОР С КОДОМ "CODE" (ЭТО
ВНУТРЕННЯЯ НЕСОВМЕСТИМОСТЬ C0 И C1, ВОЗНИКАЮЩАЯ ИЗ-ЗА
ПРОДОЛЖАЮЩЕЙСЯ РАЗРАБОТКИ).
NO CODE TABLE FOR OP: NAME - (C1)
- В C1 НЕ РЕАЛИЗОВАН ОПЕРАТОР "NAME" (ЭТО ВНУТРЕННЯЯ
НЕСОВМЕСТИМОСТЬ C0 И C1, ВОЗНИКАЮЩАЯ ИЗ-ЗА ПРОДОЛЖАЮЩЕЙСЯ
РАЗРАБОТКИ).
NO FIELD INITIALIZATION - (C0)
- НЕДОПУСТИМА ИНИЦИАЛИЗАЦИЯ БИТОВЫХ ПОЛЕЙ.
NO MATCH' FOR OP CODE - (C1)
- НЕТ ТОЧКИ ВХОДА В ДОПОЛНИТЕЛЬНУЮ ТАБЛИЦУ ДЛЯ ОПЕРАТОРА С
КОДОМ "CODE". ВНУТРЕННЯЯ ОШИБКА КОМПИЛЯТОРА.
NO SPACE - (CPP)
- НЕДОСТАТОЧНО ПАМЯТИ ПРИ РАБОТЕ ПРЕПРОЦЕССРА. РАЗБЕЙТЕ
ФАЙЛ НА БОЛЕЕ КОРОТКИЕ.
NO STRINGS IN AUTOMATIC - (C0)
- НЕДОПУСТИМЫ СТРОКИ С ТИПОМ AUTO.
NONTERMINATED COMMENT - (C0)
- НЕОГРАНИЧЕННЫЙ КОММЕНТАРИЙ (КОНЕЦ ФАЙЛА ВСТРЕЧЕН В
КОМЕНТАРИИ).
NONTERMINATED STRING - (C0)
- НЕОГРАНИЧЕННАЯ СТРОКА - В СИМВОЛЬНОЙ СТРОКЕ ВСТРЕЧЕН
НЕЭКРАНИРОВАННЫЙ СИМВОЛ ПЕРЕВОДА СТРОКИ.
NOT AN ARGUMENT: "NAME" - (C0)
- ПЕРЕМЕННАЯ "NAME", ОПИСАННАЯ ПРИ ОПИСАНИИ ФОРМАЛЬНЫХ
ПАРАМЕТРОВ ФУНКЦИИ ОТСУТСТВУЕТ В СПИСКЕ ФОРМАЛЬНЫХ
ПАРАМЕТРОВ.
NULL DIMENSION - (C0)
- ПРИ ОПИСАНИИ МНОГОМЕРНОГО МАССИВА ОПУЩЕНА ИЛИ РАВНА НУЛЮ
КАКАЯ-ЛИБО РАЗМЕРНОСТЬ, КРОМЕ САМОЙ СТАРШЕЙ (САМОЙ
ПРАВОЙ).
NUMBER SYNTAX - (C0)
- СИНТАКСИЧЕСКАЯ ОШИБКА ПРИ ЗАПИСИ КОНСТАНТЫ (ЧИСЛА).
OUT OF SPACE - (C0)
- НЕДОСТАТОЧНО ПАМЯТИ ДЛЯ C0. РАЗБЕЙТЕ ФАЙЛ НА БОЛЕЕ
КОРОТКИЕ.
OUT OF SPACE-- C1 - (C1)
- НЕДОСТАТОЧНО ПАМЯТИ ДЛЯ C1.
OUTPUT WRITE ERROR - (CPP)
- ОШИБКА ЗАПИСИ В ВЫХОДНОЙ ИЛИ ПРОМЕЖУТОЧНЫЙ ФАЙЛ В
ПРЕПРОЦЕССОРЕ.
PNAME CALLED ILLEGALLY - (C1)
- СБОЙ ИЛИ ВНУТРЕННЯЯ ОШИБКА КОМПИЛЯТОРА.
- 26 -
POW2 BOTCH - (C1)
- СБОЙ ИЛИ ВНУТРЕННЯЯ ОШИБКА КОМПИЛЯТОРА.
RANK TOO LARGE - (C0)
- КОЛИЧЕСТВО РАЗМЕРНОСТЕЙ МНОГОМЕРНОГО МАССИВА ПРЕВОСХОДИТ
5.
REGISTER OVERFLOW: SIMPLIFY EXPRESSION - (C1)
- ПРИ ПОПЫТКЕ СКОМПИЛИРОВАТЬ ВЫРАЖЕНИЕ НЕХВАТИЛО РЕГИСТРОВ
- УПРОСТИТЕ ВЫРАЖЕНИЕ ИЛИ УМЕНЬШИТЕ ЧИСЛО РЕГИСТРОВЫХ
ПЕРЕМЕННЫХ.
STACK OVERFLOW BOTCH - (C1)
- ПЕРЕПОЛНЕНИЕ ВНУТРЕННЕГО СТЕКА. УПРОСТИТЕ ВЫРАЖЕНИЕ.
STATEMENT SYNTAX - (C0)
- НЕДОПУСТИМЫЙ СИНТАКСИС ОПЕРАТОРА. ОШИБКА, ВЕРОЯТНЕЕ
ВСЕГО, В ПРЕДЫДУЩИХ СТРОКАХ.
SWITCH TABLE OVERFLOW - (C0)
- ПЕРЕПОЛНЕНИЕ ВНУТРЕННИХ ТАБЛИЦ ДЛЯ ПЕРЕКЛЮЧАТЕЛЯ.
УМЕНЬШИТЕ КОЛИЧЕСТВО КОНСТРУKЦИЙ "CASG".
SYMBOL TABLE OVERFLOW - (C0)
- ПЕРЕПОЛНЕНИЕ ТАБЛИЦЫ СИМВОЛОВ. РАЗБЕЙТЕ БОЛЬШИЕ ФУНКЦИИ И
ФАЙЛЫ НА МЕНЬШИЕ, ВНЕШНИЕ ПЕРЕМЕННЫЕ (ГДЕ ЭТО ВОЗМОЖНО)
СДЕЛАЙТЕ ВНУТРЕННИМИ.
TOKEN TOO LONG - (CPP)
- СЛИШКОМ ДЛИННАЯ ВХОДНАЯ СТРОКА.
TOO MANY -D OPTIONS, IGNORING "SYM" - (CPP)
- СЛИШКОМ МНОГО СИМВОЛОВ, ОПРЕДЕЛЯЕМЫХ В ПРЕПРОЦЕССОРЕ ПРИ
ПОМОЩИ КЛЮЧЕЙ "D". СИМВОЛ "SYM" ИГНОРИРУЕТСЯ.
TOO MANY -U OPTIONS, IGNORING "SYM" - (CPP)
- СЛИШКОМ МНОГО СИМВОЛОВ, ОПРЕДЕЛЕНИЯ КОТОРЫХ СНИМАЮТСЯ В
ПРЕПРОЦЕССОРЕ ПРИ ПОМОЩИ КЛЮЧЕЙ "U". СИМВОЛ "SYM"
ИГНОРИРУЕТСЯ.
TOO MANY DEFINES - (CPP)
- СЛИШКОМ МНОГО МАКРООПРЕДЕЛЕНИЙ (#DEFINE).
TOO MANY FORMALS: "NAME" - (CPP)
- СЛИШКОМ МНОГО ФОРМАЛЬНЫХ ПАРАМЕТРОВ В МАКРОСЕ.
ПЕРЕПОЛНЕНИЕ НАСТУПИЛО НА ПАРАМЕТРЕ "NAME".
TOO MANY INITIALIZERS: "NAME" - (C0)
- СЛИШКОМ МНОГО ИНИЦИАЛИЗАТОРОВ ДЛЯ ОБ'ЕКТА "NAME"
(НАПРИМЕР, ДЛЯ МАССИВА ДЛИНОЙ 4 УКАЗАНО 5 ЗНАЧЕНИЙ ПРИ
ИНИЦИАЛИЗАЦИИ).
TOO MANY STRUCTURE INITIALIZERS - (C0)
- ПРИ ИНИЦИАЛИЗАЦИИ СТРУКТУРЫ УКАЗАНО БОЛЬШЕ
ИНИЦИАЛИЗАТОРОВ, ЧЕМ ЧИСЛО ЭЛЕМЕНТОВ СТРУКТУРЫ.
TOO MANY STRUCTURE MEMBERS - (C0)
- У СТРУКТУРЫ СЛИШКОМ МНОГО ЧЛЕНОВ.
TOO MANY ]'S - (C0)
- СЛИШКОМ МНОГО ЗАКРЫВАЮЩИХ ФИГУРНЫХ СКОБОК: НА НУЛЕВОМ
УРОВНЕ ВЛОЖЕННОСТИ ОБНАРУЖЕНА ЗАКРЫВАЮЩАЯ ФИГУРНАЯ
СКОБКА.
TOO MUCH DEFINING - (CPP)
- СЛИШКОМ МНОГО МАКРООПРЕДЕЛЕНИЙ (#DEFINE).
TYPE CLASH - (C0)
- НЕДОПУСТИМОЕ ОПИСАНИЕ: КОНФЛИКТ ТИПОВ (НАПРИМЕР INT FLOAT
A;).
TYPE IS TOO COMPLICATED - (C0)
- ОПРЕДЕЛЯЕМЫЙ ТИП СЛИШКОМ СЛОЖЕН.
UNDEFINED CONTROL - (CPP)
- НЕРАСПОЗНАННОЕ ПРЕПРОЦЕССОРОМ КЛЮЧЕВОЕ СЛОВО В СТРОКЕ,
- 27 -
НАЧИНАЮЩЕЙСЯ С '#'.
UNDEFINED STRUCTURE - (C0)
- НЕОПРЕДЕЛЕННАЯ СТРУКТУРА.
UNDEFINED STRUCTURE INITIALIZATION - (C0)
- ИНИЦИАЛИЗАЦИЯ НЕОПРЕДЕЛЕННОЙ СТРУКТУРЫ.
UNEXPECTED EOF - (C0)
- КОНЕЦ ФАЙЛА ВСТРЕЧЕН В НЕПОДХОДЯЩЕМ КОНТЕКСТЕ.
UNIMPLEMENTED FIELD OPERATOR - (C1)
- ИСПОЛЬЗОВАН НЕДОПУСТИМЫЙ ДЛЯ БИТОВЫХ ПОЛЕЙ ОПЕРАТОР.
UNIMPLEMENTED STRUCTURE ASSIGNMENT - (C1)
- НЕРЕАЛИЗОВАННОЕ ПРИСВОЕНИЕ СТРУКТУРЫ (МОЖЕТ ВОЗНИКАТЬ
ТОЛЬКО ПРИ ПЕРЕДАЧЕ СТРУКТУРЫ В ФУНКЦИЮ ПО ЗНАЧЕНИЮ). (*)
UNKNOWN CHARACTER - (C0)
- В ТЕКСТЕ ПРОГРАММЫ ВСТРЕЧЕН НЕДОПУСТИМЫЙ СИМВОЛ. НАИБОЛЕЕ
ЧАСТАЯ (У НАЧИНАЮЩИХ) ПРИЧИНА - ЗАПИСЬ ПРОГРАММЫ ТАК, КАК
ОНА ПРЕДСТАВЛЕНА В РУКОВОДСТВАХ ПО "СИ", ПОЛУЧЕННЫХ С
МАШИННОГО НОСИТЕЛЯ И РАСПЕЧАТАННЫХ НА АЦПУ, НЕ ИМЕЮЩЕМ
МАЛЫХ ЛАТИНСКИХ БУКВ: ОТРЫВАЮЩАЯСЯ ФИГУРНАЯ СКОБКА
ЗАПИСЫВАЕТСЯ КАК "\(", ЗАКРЫВАЮЩАЯСЯ - КАК "\)",
ВЕРТИКАЛЬНАЯ ЧЕРТА - КАК "\!" И T.Д. СМ. В ЭТОМ СЛУЧАЕ
"ОПИСАНИЕ ЯЗЫКА. ВСТУПЛЕНИЕ". ЕЩЕ ОДНА ПРИЧИНА -
НЕЗАКРЫТИЕ ИЛИ ПРЕЖДЕВРЕМЕННОЕ ЗАКРЫТИЕ СИМВОЛЬНОЙ
СТРОКИ.
UNKNOWN KEYWORD - (C0)
- НЕРАСПОЗНАННОЕ КЛЮЧЕВОЕ СЛОВО.
UNREASONABLE INCLUDE NESTING - (CPP)
- СЛИШКОМ БОЛЬШАЯ (БОЛЕЕ 10) ГЛУБИНА ВЛОЖЕНИЯ ФАЙЛОВ ПО
"#INCLUDE".
USAGE : CC [-CEFJKLMNPRSTXZ] ....... - (CC)
- ПОДСКАЗКА - ВИД КОМАНДНОЙ СТРОКИ - ВЫДАЕТСЯ ПРИ ВЫЗОВЕ
КОМПИЛЯТОРА С ПУСТОЙ КОМАНДНОЙ СТРОКОЙ.
WARNING: POSSIBLY TOO MUCH DATA - (C1)
- ПРЕДУПРЕЖДЕНИЕ: ОЧЕНЬ БОЛЬШОЙ НАБОР ДАННЫХ (БОЛЬШЕ 56000
БАЙТ).
WARNING: STRUCTURE REDECLARATION - (C0)
- ПРЕДУПРЕЖДЕНИЕ: ПЕРЕОПРЕДЕЛЕНИЕ СТРУКТУРЫ.
WARNING: VERY LARGE DATA STRUCTURE - (C0)
- ПРЕДУПРЕЖДЕНИЕ: ОЧЕНЬ БОЛЬШОЙ НАБОР ДАННЫХ.
WARNING: "X=" OPERATOR ASSUMED - (C0)
- ПРЕДУПРЕЖДЕНИЕ: ОБНАРУЖЕНА КОНСТРУКЦИЯ ВИДА "=ОП",
КОТОРУЮ МОЖНО ИНТЕРПРЕТИРОВАТЬ КАК УСТАРЕВШУЮ ФОРМУ
ЗАПИСИ СОСТАВНОЙ ОПЕРАЦИИ ПРИСВАИВАНИЯ. КОМПИЛЯТОР
ПОДРАЗУМЕВАЕТ ИМЕННО ТАКУЮ ОПЕРАЦИЮ, Т.Е. ПРЕОБРАЗУЕТ
КОНСТРУКЦИЮ К ВИДУ "ОП=".
WRITE ERROR ON TEMP - (C0)
- ОШИБКА ЗАПИСИ В ПРОМЕЖУТОЧНЫЙ ФАЙЛ.
XX COMPLETE - (CC)
- СООБЩЕНИЯ ОБ УСПЕШНОМ ЗАВЕРШЕНИИ СТАДИИ "XX" (ВЫДАЮТСЯ,
ЕСЛИ ПРИСУТСТВУЕТ КЛЮЧ 'L').
- 28 -
ПРИЛОЖЕНИЕ 2. КОДЫ И МНЕМОНИКИ СТАНДАРТНЫХ ОШИБОК
----- 0 "NO ERROR"
- ДОПОЛНИТЕЛЬНЫХ СООБЩЕНИЙ ОБ ОШИБКЕ НЕТ
E_ILF 2 "ILLEGAL FILE NAME"
- НЕДОПУСТИМОЕ ИМЯ ФАЙЛА
E_NOR 4 "NO ROOM FOR USER ON DEVICE"
- ДЛЯ ОТКРЫТИЯ ФАЙЛА НЕДОСТАТОЧНО МЕСТА
E_FNF 5 "FILE NOT FOUND"
- ФАЙЛ НЕНАЙДЕН
E_NOD 6 "NO A VALID DEVICE"
- НЕДОПУСТИМОЕ УСТРОЙСТВО
E_ILU 7 "I/O CHANNEL IN USE"
- КАНАЛ ВВОДА/ВЫВОДА ИСПОЛЬЗУЕТСЯ
E_NOO 9 "I/O CHANNEL NOT OPEN"
- КАНАЛ ВВОДА/ВЫВОДА НЕ ОТКРЫТ
E_EOF 11 "END OF FILE ON DEVICE"
- КОНЕЦ ФАЙЛА
E_FAT 12 "FATAL SYSTEM I/O FAILURE"
- НЕРАСПОЗНАННАЯ ОШИБКА ВВОДА/ВЫВОДА
E_ERR 13 "USER DATA ERROR ON DEVICE"
- ОШИБКА ЧТЕНИЯ/ЗАПИСИ ДАННЫХ НА УСТРОЙСТВЕ
E_FND 15 "FILE ALREADY FOUND (PROTECTED)"
- УЖЕ СУЩЕСТВУЕТ ЗАЩИЩЕННЫЙ ФАЙЛ С ТАКИМ ИМЕНЕМ
E_NOC 17 "NO FREE I/O CHANNELS"
- НЕТ СВОБОДНЫХ КАНАЛОВ ВВОДА/ВЫВОДА
E_NSP 32 "NO MEMORY SPACE LEFT"
- НЕДОСТАТОЧНО ДИНАМИЧЕСКОЙ ПАМЯТИ
E_DOM 33 "ILLEGAL ARGUMENT"
- НЕКОРРЕКТНЫЙ АРГУМЕНТ ДЛЯ ФУНКЦИИ, НАПРИМЕР ПРИ LOG(-1.)
E_RAN 34 "FLOATING OVERFLOW/UNDERFLOW"
- ВЕЩЕСТВЕННОЕ ПЕРЕПОЛНЕНИЕ ИЛИ АНТИПЕРЕПОЛНЕНИЕ
----- ?? "UNINDENTIFY ERROR"
- НЕОПРЕДЕЛЕННАЯ ОШИБКА
- 29 -
ПРИЛОЖЕНИЕ 3. КАТАЛОГ ПОСТАВЛЯЕМЫХ ФАЙЛОВ
10-FEB-86
CC .SAV 231 17-JAN-86 - КОМПИЛЯТОР
AS .SAV 65 29-APR-85 - АССЕМБЛЕР
STDIO .H 4 26-NOV-85 - ФАЙЛ ОПРЕДЕЛЕНИЙ ВВОДА/ВЫВОДА
ERRNO .H 2 22-JAN-86 - ФАЙЛ ОПРЕДЕЛЕНИЙ КОДОВ ОШИБОК
CTYPE .H 5 11-SEP-85 - ФАЙЛ ОПР. РАБОТЫ С СМИВОЛАМИ
TIME .H 1 01-FEB-85 - ФАЙЛ ОПР. ДЛЯ ФУНКЦИИ TIME()
SETJMP.H 1 11-JAN-85 - ФАЙЛ ОПР. ДЛЯ ФУНКЦИИ SETJMP()
MATH .H 1 01-FEB-85 - ФАЙЛ ОПР. МАТЕМАТ. ФУНКЦИЙ
RCSTAT.H 1 22-NOV-85 - ФАЙЛ ОПР. ДЛЯ Ф-ИИ $CSTAT()
RDIR .H 1 25-NOV-85 - ФАЙЛ ОПР. ДЛЯ МОДУЛЯ RDIR()
RDSTAT.H 2 06-DEC-85 - ФАЙЛ ОПР. ДЛЯ Ф-ИИ $DSTATUS()
DBLK .H 1 22-NOV-85 - ФАЙЛ ОПР. БЛОКА ОПИСАН. ФАЙЛА
SPEIS .OBJ 2 16-JAN-86 - ГОЛОВНОЙ МОДУЛЬ ДЛЯ ЭВМ С EIS
SPNHD .OBJ 2 16-JAN-86 - ГОЛОВНОЙ МОД. ДЛЯ ЭВМ БЕЗ EIS
CXLIB .OBJ 117 10-FEB-86 - СТАНДАРТНАЯ БИБЛИОТЕКА
INITNF.OBJ 2 10-FEB-86 - МОДУЛЬ ИНИЦИАЛИЗ. БЕЗ ЭМУЛЯЦИИ
СТАРТОВОЙ ПОСЛЕДОВАТ. ОС UNIX
NFTIO .OBJ 2 16-JAN-86 - МОДУЛЬ ТЕРМИН. ВВОДА/ВЫВОДА
CRLIB .OBJ 29 29-JAN-86 - БИБЛИОТЕКА ФУНКЦИЙ ОС РАФОС
CTLIB .OBJ 21 23-OCT-85 - БИБЛИОТЕКА ДОП. Ф-ИЙ TS МОНИТ.
CMLIB .OBJ 29 04-MAY-85 - БИБЛИОТЕКА МАТЕМАТИЧ. ФУНКЦИЙ
ASPEIS.OBJ 3 21-JAN-86 - ГОЛОВНОЙ МОДУЛЬ АВТОНОМНЫХ
ПРОГРАММ (ЭВМ С EIS).
ASPNHD.OBJ 3 21-JAN-86 - ГОЛОВНОЙ МОДУЛЬ АВТОНОМНЫХ
ПРОГРАММ (ЭВМ БЕЗ EIS).
CALIB .OBJ 84 21-JAN-86 - БИБЛИОТЕКА АВТОНОМН. ПОДДЕРЖКИ
ANTIO .OBJ 1 21-JAN-86 - МОДУЛЬ ОТКЛ. ТЕРМИН ВВ/ВЫВОДА
24 FILES, 610 BLOCKS
976 FREE BLOCKS
- 30 -
СОДЕРЖАНИЕ
АННОТАЦИЯ . . . . . . . . . . . . . . . . . . . . . . . . 2
1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ . . . . . . . . . . . 2
2. РАБОТА С КОМПИЛЯТОРОМ . . . . . . . . . . . . . . . . 3
2.1. ЗАПУСК КОМПИЛЯТОРА . . . . . . . . . . . . . . . . 3
2.2. КОМАНДНАЯ СТРОКА . . . . . . . . . . . . . . . . . 4
2.3. ПРОБЛЕМЫ ПРОМЕЖУТОЧНЫХ ФАЙЛОВ . . . . . . . . . . 7
2.4. ЭМУЛЯЦИЯ EIS . . . . . . . . . . . . . . . . . . . 8
2.5. ВЫЧИСЛЕНИЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ . . . . . . . . . . 9
2.5.1. ЭМУЛЯЦИЯ FPU . . . . . . . . . . . . . . . . . 9
2.5.2. ИНИЦИАЛИЗАЦИЯ FPU . . . . . . . . . . . . . . 10
2.5.3. ФОРМАТНЫЙ ВЫВОД ЧИСЕЛ С ПЛАВАЮЩЕЙ
ЗАПЯТОЙ . . . . . . . . . . . . . . . . . . . 10
2.6. ОПТИМИЗАЦИЯ . . . . . . . . . . . . . . . . . . . 11
3. КОМПОНОВКА . . . . . . . . . . . . . . . . . . . . . . 11
3.1. СОЗДАНИЕ АВТОНОМНЫХ ПРОГРАММ . . . . . . . . . . . 13
4. ЗАПУСК ПОДГОТОВЛЕННЫХ ПРОГРАММ . . . . . . . . . . . . 14
4.1. ВВОД И ОБРАБОТКА КОМАНДНОЙ СТРОКИ . . . . . . . . 14
4.2. СООБЩЕНИЯ ИСПОЛНЯЮЩЕЙ СИСТЕМЫ ПРИ СТАРТЕ . . . . . 16
4.3. УПРАВЛЕНИЕ СТАРТОВЫМИ ДЕЙСТВИЯМИ . . . . . . . . . 17
5. СРЕДСТВА ОТЛАДКИ . . . . . . . . . . . . . . . . . . . 17
6. СООБЩЕНИЯ ОПЕРАТОРУ . . . . . . . . . . . . . . . . . 19
ПРИЛОЖЕНИЕ 1. ТЕКСТЫ ДИАГНОСТИЧЕСКИХ СООБЩЕНИЙ
КОМПИЛЯТОРА . . . . . . . . . . . . . . . . 21
ПРИЛОЖЕНИЕ 2. КОДЫ И МНЕМОНИКИ СТАНДАРТНЫХ ОШИБОК . . . . 28
ПРИЛОЖЕНИЕ 3. КАТАЛОГ ПОСТАВЛЯЕМЫХ ФАЙЛОВ . . . . . . . . 29
СОДЕРЖАНИЕ . . . . . . . . . . . . . . . . . . . . . . . 30
>>