Настройка опций компоновщика.
При выборе в окне Project Settings вкладки Link (рис. 4) можно задавать параметры для 32-разрядного компоновщика (Link.exe).
Рис. 4. Вкладка Link блока диалога Project Settings.
При выборе в раскрывающемся списке Category (категория) категории опций, в блоке диалога будут отображаться опции, относящиеся к этой категории.
Output file name(имя выходного файла) – переопределяет заданное по умолчанию имя программы и ее местоположение.
Object/library modules(объектные/библиотечные модули) – передает компоновщику объектные файлы или стандартную библиотеку (статическую или импортируемую).
Generate debug info(генерировать отладочную информацию) – предписывает создавать отладочную информацию для EXE- или DLL-файлов.
Link incrementally(компоновать по шагам) – определяет пошаговую компоновку.
Enable profiling(разрешить изменение временных характеристик) – создает на выходе файл, который может использоваться профайлером.
Ignore all default libraries(игнорировать все библиотеки, заданные по умолчанию) – предписывает компоновщику не учитывать все библиотеки, заданные по умолчанию, при разрешении им внешних ссылок.
3. Отладка программ в Visual C++.
Для изучения отладчика напишем программу, заведомо содержащую несколько ошибок, а затем исправим их с помощью отладчика.
3.1. Для создания стандартного шаблона будущей программы для Windows на Visual C++выполнить:
3.1.1.После запуска Visual C++, выполнить команду File > New; откроется окно диалога New (рис. 5).
Рис. 5 Начало создания программы с помощью AppWizard
3.1.2. Выберите из списка строку MFC AppWizard (exe).
3.1.3. Введите в текстовом поле Project Name имя проекта (например buggy).
3.1.4. Нажмите кнопку ОК, чтобы запустить мастер Visual C++ AppWizard (рис. 6).
Рис. 6 MFC AppWizard упрощает создание программы на Visual C++
3.1.5. AppWizard напишет основную часть программного кода.
3.1.6. На экране появиться окно первого из шести этапов работы с AppWizard (рис. 6).
3.1.7. Следует оставить без изменение все стандартные параметры AppWizard, кроме одного – по умолчанию AppWizard создает программы с несколькими окнами, а в данном случае необходима программы с одним окном.
3.1.8. Необходимо установить переключатель Single Document (рис. 6) и нажать кнопку Finish. Откроется окно New Project Information (рис. 7).
Рис. 7
Следует нажать кнопку ОК, чтобы завершить создание проекта.
Далее следует копировать приведенный код в указанные методы. Для нахождения необходимых методов следует воспользоваться материалами первой части данных методических указаний.
3.2. Создаваемая программа будет вычислять среднее арифметическое чисел от 1 до 5.
3.2.1. Для хранения пяти целых чисел создадим массив data. Объявим данный массив в заголовочном файле buggyDoc.h:
class CBuggyDoc : public CDocument
{
.
.
.
public:
int data[5];
virtual ~CBuggyDoc();
.
.
.
};
3.2.2. Исходные числа будут заноситься в массив в конструкторе документа:
CBuggyDoc::CBuggyDoc()
{
data[0] = 1;
data[1] = 2;
data[2] = 3;
data[3] = 4;
data[4] = 5; }
3.2.3. Создадим новый пункт меню, выбрав который будет происходить вычисление.
С помощью редактора меню Visual C++ включим новую команду в меню File. Чтобы запустить редактор меню перейдите на вкладку ResourseView в окне просмотра. Откроется перечень ресурсов программы buggy. Найдите в списке строку Menu и откройте ее. Дважды щелкните на строке IDR_MAINFRAME – это приведет к запуску редактора меню (рис. 8).
Рис. 8. Редактор меню Visual C++
Так как необходимо добавить в меню новую команду Calculate, щелкните на меню File, потом на Print и нажмите клавишу Insert. После этого в меню появится новая команда. Дважды щелкните на ней – откроется диалоговое окно Menu Item Properties (рис. 9), содержащее свойства команды.
Рис. 9.
Следует занести в поле Caption строку Calculate и закройте окно. Новой команде автоматически присваивается идентификатор ID_FILE_CALCULATE. Новая команда внесена в меню. Закройте редактор меню. Следующим шагом станет подключение команды к коду программы, чтобы стало возможным обрабатывать ее вызов из меню.
3.2.4. ClassWizard поможет подключить команду меню к обработчику, который будет запускаться при ее вызове из меню. Откройте окно ClassWizard, выполнив команду View -> ClassWizard (рис.10).
Рис. 10. Подключение команды меню к методу в программе на Visual C++.
Идентификатор новой команды ID_FILE_CALCULATE уже присутствует в списке Object IDs. Проследите, чтобы в списке Class name был выбран класс виды CBuggyView. Выделите строку ID_FILE_CALCULATE в списке Object IDs, затем щелкните на строке Command в списке Messages. ClassWizard предложит присвоить обработчику имя OnFileCalculate() – нажмите кнопку Ок. После этого новый метод появится в списке Member functions окна ClassWizard.
3.2.5. Дважды щелкните на строке OnFileCalculate() в списке Member functions, и в окне справа появится код метода:
void CBuggyView::OnFileCalculate()
{
// TODO: Add your command handler code here
}
Этот метод будет вызываться при выполнении пользователем команды Calculate, поэтому в него следует поместить соответствующий код.
3.2.6. Программа должна вычислять среднее арифметическое м выводить его в окне. Прежде всего необходимо получить указатель на объект документа, поскольку исходные данные хранятся именно в нем:
void CBuggyView::OnFileCalculate()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
}
3.2.7. Далее необходимо создать переменные для хранения суммы и среднего арифметического:
void CBuggyView::OnFileCalculate()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
}
3.2.8. Напишем цикл для вычисления суммы пяти цифр, а затем найдем среднее арифметическое:
void CBuggyView::OnFileCalculate()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
for (int i = 1; i < 5; i++)
{
Sum += pDoc->data[i];
}
Average = Sum / 5;
}
3.2.9. Теперь выведем результат вычисления на экран:
void CBuggyView::OnFileCalculate()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
for (int i = 1; i < 5; i++)
{
Sum += pDoc->data[i];
}
Average = Sum / 5;
OutputString.Format("Average = %.3f", Average);
Invalidate();
}
Обработчик команды меню готов.
3.2.10. Далее необходимо объявить переменную OutputString в заголовочном файле вида buggyView.h:
class CBuggyView : public CView
{
.
.
.
protected:
CString OutputString;
.
.
.
};
3.2.11. В конструкторе вида в эту строку заносится подсказка, предлагающая пользователю выполнить команду File -> Calculate:
CBuggyView::CBuggyView()
{
OutputString = "Run the command File -> Calculate";
}
3.2.12. Напишем код, который будет отображать значение строковой переменной OutputString на экране.
void CBuggyView::OnDraw(CDC* pDC)
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0,0,OutputString);
}
Программа готова к выполнению. Теперь следует запустить ее и выбрать команду File -> Calculate. Однако результатом выполнения программы будет совсем другое число, а не цифра 3 как ожидалось.