Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы по курсу.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
462 Кб
Скачать
☆

6. Компиляция и выполнение программы

    Закончив набор текста и сохранив файл программы на диске, выполните компиляцию программы. Для этого выполните: Главное Меню -> Compile -> Compile или нажмите комбинацию клавиш Alt+F9. На экране появляется окно Compiling, в котором отображается ход компиляции. При нормальном завершении компиляции в нижней строке этого окна должно быть выведено:

    Success:      Press any key

    Если там выводится:

    Errors:      Press any key или:

    Warnings:      Press any key - ваша программа требует коррекции.

    Работу с диагностикой ошибок мы подробнее рассмотрим в следующем разделе. После того, как Вы откомпилировали программу без ошибок, запустите ее на выполнение. Для этого выполните: Главное Меню -> Run -> Run или нажмите комбинацию клавиш Ctrl+F9. На экране появляется окно Linking, в котором отображается ход компоновки. При нормальном завершении компоновки это окно пропадает само собой и выполняется программа.

    Если же в этому окне выводится:

    Errors:      Press any key - ваша программа требует коррекции.

    Если Ваша программа не требует ввода данных (а именно такова та программа, с которой мы сейчас работаем), Вы даже не успеете заметить, как эта программа выполняется. Чтобы посмотреть результаты, которые программа выдала на экран, выполните: Главное Меню -> Window -> User screen или нажмите комбинацию клавиш Alt+F5. Вы увидите черный экран с тем, что вывела Ваша программа (в нашем случае это должно быть: 200 100). Чтобы выйти из режима просмотра результатов, нажмите любую клавишу.

    Проверьте содержание Вашего рабочего каталога. Если текст Вашей программы был сохранен в файле myfile.c, то после компиляции в каталоге должен появится файл myfile.obj, а после выполнения - еще и myfile.exe.

7. Диагностика ошибок и предупреждения компилятора и компоновщика

    На этом этапе выполнения лабораторной работы мы предлагаем Вам поэкспериментировать с сообщениями компилятора и компоновщика. Предварительно рекомендуем сделать копию файла программы. Для этого выполните Главное Меню -> File -> Save as... и введите какое-то новое имя программы, например: myfilex.c. Теперь у Вас есть две копии программы в двух файлах (myfile.c и myfilex.c). Одна копия (пусть это будет myfile.c) будет хранить правильную версию программы, а в другую (это будет myfilex.c) мы нарочно будем вводить ошибки.

    Откройте в текстовом редакторе файл myfilex.c. Внесите такие изменения в текст программы (тут и далее мы указываем номера строк, в которые нужно внести изменения):

6 c=a+b1;

9 x=100; a123

18 /*}*/

    Запустите программу на компиляцию (Ctrl+F9). Вы получите:

    Errors:      Press any key в окне Compiling. Когда Вы нажмете любую клавишу, внизу экрана откроется окно Message с таким содержимым:

Compiling MYFILEX.C:

Error

MYFILEX.C

6: Undefined symbol 'b1'

Error

MYFILEX.C

10: Undefined symbol 'a123'

Error

MYFILEX.C

10: Statement missing ;

Error

MYFILEX.C

17: Compound statement missing }

    Это сообщения компилятора про ошибки. Первая строка - заголовок. В следующих строках: признак ошибки, имя файла, в котором найдена ошибка, номер строки текста программы, в которой была обнаружена ошибка, диагностика ошибки.

    Сообщение к строке 6 - "Неопределенный символ 'b1'". В этом операторе используется переменная с таким именем, которой нет среди объявленных переменных.

    Первое сообщение к строке 10 - "Неопределенный символ 'a123'". Текст a123 похож на имя переменной, но такая переменная не объявлена. Другое сообщение к строке 10 - "В операторе отсутствует ;" . Текст a123 может быть отдельным оператором, но в нем нет признака конца оператора. Обратите внимание на то, что хотя ошибку мы внесли в строку 9, сообщение выдается к строке 10, поскольку ошибка была обнаружена только при обработке этой строки.

    Сообщение к строке 17 - "В составном операторе отсутствует }" - компилятор выявил непарность операторных скобок - { }. Где бы ни была пропущена закрывающая операторная скобка, ее отсутствие может быть обнаружено только на последнем операторе программы.

    Когда Вы перемещаетесь по списку сообщений об ошибках в окне Message, в окне редактора то место текста программы, к которому относится текущее сообщение, выделяется цветом. Когда Вы переключаетесь в окно редактора (клавиша F6), курсор устанавливается на это самое место.

    Восстановите правильное содержимое файла myfilex.c. (Это можно сделать, открыв в редакторе файл myfile.c и вновь сохранив его с именем myfilex.c. При этом Вы получите предупреждение о том, чтоо файл myfilex.c будет изменен, на которое Вам нужно ответить Yes.) Внесите такие изменения в текст программы:

3 int a, b, c, d, x, y, z=2;

4 a=b;

8 if (c=d) {

    Запустите программу на компиляцию (Ctrl+F9). Вы получите:

    Warnings: Press any key в окне Compiling. Когда Вы нажмете любую клавишу, внизу экрана откроется окно Message с таким текстом:

Compiling MYFILEX.C:

Warning

MYFILEX.C

4: Possible use of 'b' before definition

Warning

MYFILEX.C

8: Possible incorrect assignment

Warning

MYFILEX.C

18: 'z' is assigned value that is never used

Warning

MYFILEX.C

18: 'c' is assigned value that is never used

    Это - предупреждения компилятора.

    Предупреждение к строке 4 - "Возможно использование 'b' до определения". В этом операторе значение переменной b присваивается переменной a, но какое значение имеет b на этот момент выполнения программы - неизвестно.

    Предупреждение к строке 8 - "Возможно некорректное присваивание". Выражение c=d имеет смысл: "присвоить переменной с значение переменной d". Выражение c==d, которое применено в правильной программе, имеет смысл: "сравнить переменные c и d". Поскольку выражение включено в условный оператор, компилятор имеет основания предполагать, что тут должно быть сравнение, а не присваивания.

    Предупреждение к строке 18: "Переменной 'z' присваивается значение, которое нигде не используется". В операторе 3 мы дали переменной z начальное значение 2. Но далее в программе значение z нигде ничему не присваивается и ни с чем не сравнивается.

    Еще одно такое же предупреждение к строке 18 относится к переменной c. Присваивание значения этой переменной происходит в строке 8. Ситуация неиспользования значения может быть выявлена только в конце программы.

    Вы можете получить не все предупреждения из тех, которые тут перечислены. При настройке среды можно отменить или возобновить выдачу тех или иных предупреждений. Это делается через: Главное Меню -> Options -> Compiler -> Messages.

    Восстановите правильное содержание файла myfilex.c. Внесите такие изменения в текст программы:

4 a=1; abc();

    Запустите программу на выполнение (F9).

    Вы получите:

    Errors: Press any key в окне Linking. В окне Message будет:

Linking MYFILEX.EXE:

Linker Error:

Undefined symbol _abc in module MYFILEX.C

    Это - сообщение компоновщика. "Неопределенный символ _abc в модуле MYFILEX.C". Синтаксически оператор abc(); является обращением к функции, именно так его трактует компилятор. Но когда компоновщик пытается найти функцию с таким именем в доступных ему модулях и библиотеках, он ее не находит, про что и сообщает нам.

    Если Вы запустите отдельным шагом компиляцию той же программы, Вы получите:

Compiling MYFILEX.C:

Warning

MYFILEX.C

4: Call to function 'abc' with no prototype

    Компилятор предупреждает о том, что в программе есть "Вызов функции 'abc' без прототипа".