Выполнение и отладка программы

Компиляция и сборка программы выполняется командами меню Project:

Compile Unit (комбинация клавиш Alt+F9) – компиляция модуля, создается объектный файл UnHello.obj;

Make PrHello (или Ctrl+F9) – сборка программы из откомпилированных модулей;

Build PrHello – сборка программы с перекомпиляцией всех модулей.

После выполнения команд Make или Build создается исполняемая программа PrHello.exe, имя которой совпадает с именем проекта.

Для запуска программы нужно выполнить команду Run, Run или нажать клавишу F9. При выполнении рассматриваемой программы будет создано текстовое окно, в которое выведутся результаты работы, рис.18. После нажатия клавиши Enter работа программы завершается и ее окно закрывается.

Выполнение и отладка программы - student2.ru

Рис.18. Работа консольного приложения

Пошаговое выполнение (трассировку) программы можно производить командами меню Run:

Step over или F8 – выполнение одной строки программы без захода в функции;

Run, Trace into или F7 – выполнение одной строки программы с заходом в функции, вызываемые в выполняемой строке;

Run, Go to cursor или F4 – выполнение программы до точки расположения курсора;

Run, Program reset или Ctrl+F2 – выход из режима отладки;

Add Watch или Ctrl+F5 – добавление переменной или выражения для просмотра.

Окно для наблюдения за переменными и выражениями выводится командой View, Debug Windows, Watches или Ctrl+Alt+W.

Файлы проекта

В состав проекта для программы 3 войдут файлы:

UnHello.cpp – файл с программным кодом;

PrHello.bpr – файл с описанием проекта;

UnHello.obj – файл, содержащий машинные команды (объектный);

PrHello.exe – рабочая программа.

Кроме этого, автоматически будут созданы файлы:

PrHello.bpf – текстовый файл с описанием проекта;

PrHello.res – двоичный файл ресурсов проекта;

PrHello.tds – двоичный файл c отладочной информацией;

*.~cp, *.~bpr, *.~h – резервные копии соответствующих файлов.

Основными файлами являются файлы: *.bpr, *.bpf, *.res, *.cpp, *.h. Только они необходимы при переносе программ с компьютера на компьютер. Остальные файлы можно безболезненно удалять с диска, так как они при компиляции всякий раз создаются заново.

В программу могут входить несколько cpp-файлов. Тот из них, который содержит функцию main, называют головным модулем проекта. В рассматриваемом примере головным модулем является файл UnHello.cpp.

Автоматическая генерация кода

Из рассмотренного примера видно, что стандартные элементы программного кода C++ Builder генерирует автоматически, в частности, создает простейший вариант главной функции программы main. Также автоматически выполняются действия по созданию файла проекта, нужно только правильно сохранять проект.

В исходный код включаются директивы препроцессора, которые рационализируют процесс создания программы. Рассмотрим их.

В программу часто входят весьма большие заголовочные файлы, многократная перекомпиляция которых не нужна и занимает много времени. Если в настройках среды в диалоге Project, Options, вызываемом командой меню Project, Options…, выбран переключатель Use pre-compiled headers, то заголовочные файлы компилируются только один раз и в откомпилированном виде записываются на диск. Директива

#pragma hdrstop

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

Директива

#pragma argused

подавляет вывод предупреждения о том, что аргументы функции, следующей за этой директивой, не используются. Если удалить (или закомментировать) эту директиву (рис. 16), компилятор выдаст предупреждение о том, что нигде не используются аргументы функции main:

[C++ Warning] UnHello.cpp(16): W8057 Parameter 'argc' is never used

[C++ Warning] UnHello.cpp(16): W8057 Parameter 'argv' is never used

Здесь 16 – номер последней строки функции main, в пределах которой обнаружена данная неточность.

Особенности ввода и вывода

Попытаемся напечатать приветствие по-русски.

#include <iostream.h>

int main(int argc, char* argv[])

{

cout << "Здравствуй, Мир!";

cin.get();

return 0;

}

Программа выведет:

╟фЁртёЄтєщ, ╠шЁ!

Непонятный набор символов вместо русских букв выводится потому, что при вводе текста программы и при ее выполнении используются разные кодовые таблицы с различной кодировкой русских букв. Windows-программы, в том числе и C++ Builder, используют кодовую таблицу 1251, исполняется же консольная программа в текстовом окне, где применяется кодовая таблица 866 операционной системы DOS. Чтобы правильно отображать русские буквы при работе программы, необходимо делать перекодировку из кодовой таблицы 1251 в кодовую таблицу 866. Для этого можно применять функцию

bool CharToOem(char* in, char* Buff);

которая переводит строку символов in в строку Buff, используя кодировку, принятую в среде исполнения программы. В нашем случае средой выполнения программы является окно DOS, поэтому будет использована соответствующая кодировка русских букв. Для доступа к функции
CharToOem в программу нужно включить заголовочный файл windows.h.

Напишем вспомогательную функцию Rus для упрощения преобразования:

#include <windows.h> // Для доступа к CharToOem

char Buff[500]; // Буфер для преобразованной строки

char* Rus(char* in) // Функция для преобразования русских букв

{

CharToOem(in, Buff); // Функция CharToOem преобразует строку in

return Buff; // в строку Buff, используя кодировку DOS

}

#pragma hdrstop

#pragma argsused

#include <iostream.h>

int main(int argc, char* argv[])

{

cout << Rus("Здравствуй, Мир!");

cin.get();

return 0;

}

Эта программа, как и ожидалось, напечатает:

Здравствуй, Мир!

Функцию Rus нельзя применять в цепочках печати вида:

cout << Rus(”Здравствуй,” << Rus(” Мир!");

так как в этом случае будет напечатано:

Здравствуй, Здравствуй,

Для печати нескольких строк по-русски каждую строку можно выводить отдельным оператором:

cout << Rus(”Здравствуй,”;

cout << Rus(” Мир!");

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


Наши рекомендации