Программирование >>  Аргументация конструирования 

1 ... 32 33 34 [ 35 ] 36 37 38 ... 108


Включение одного и того же файла в один модуль встречается чаще, чем

вы предполагаете. Бывает, что в файл включается другой файл, в который включается третий, а в него в который включается

Это не представляет проблемы, если в .h-файл входят только прототипы функций и определения Sdefine. Считается признаком дурного тона (и часто приводит к серьезным ошибкам) объявлять в подключаемых файлах глобальные переменные или создавать в них функции.

Повторных объявлений можно избежать, воспользовавшись директивой #ifdef. Она требует включения всех команд вплоть до если аргумент директивы

#ifdef бьш определен ранее (#ifndef действует наоборот- если аргумент не бьш

определен).

Mylncl-ude . h

Проверяем, бьи: а ли использована директ;;ва #define MyModui e h до этого. Если нет, значит включаемый файл во время

компхляпии вызывается впервые

#ifndef MyModuieh

Определим MyModule h с тем, чтобы щэи следующем подклю--;ен;и этого файла из то программы реального вк;:ючения файла не было #define MyModu.Le h

Сюда можн мвлять все, что отктг: разместить во включаемом файле

накрь-1ие tifndef в конце файла wencif


Эта проверка будет проводиться во время компиляции, но не во время выполнения программы.

использование

cMoHqafuuHbtx tfudcuoje/c С++

Теперь вам должно быть понятно, почему во примерах, приведенных в этой книге, используются директивы # include <.5tdi.o.h> и include <io:=treaii?.. h>. Эти подключаемые файлы содержат объявления всех используемых в программах стандартных функций.

Обратите внимание, что имена стандартных . h-файлов заключены в угловые скобки, тогда как при объявлении локальных .h-файлов используются обычные кавычки. Единственное отличие между этими типами объявлений состоит в том, что С++ начинает искать файлы, заключенные в обычные кавычки, в текущем каталоге (каталоге проекта), а поиск файлов, заключенных в угловые скобки, происходит в предопределенных каталогах, содержащих подключаемые файлы. С помощью настроек проекта программист может определить, где именно должен проводиться поиск включаемых файлов.



Гл11

ла эгра на C++

/3 эной главе...

Определение типа ошибки

Использование отладочной печати V Использование отладчика Первая программа BUDGET

5е часто случается (особенно с чайниками ), что программа идеально работает с первого раза. Крайне редко удается написать нетривиальную программу и не

допустить ни одной ошибки.

Чтобы избавиться от ошибок, можно пойти двумя путями. Первый - стирание программы и написание ее заново, а второй - поиск и исправление ошибки. Освоение первого пути я оставляю читателю, а в этой главе расскажу о том, как выследить и исправить ошибку в программе.

OnfteqexeHue tautaouiuJ/cu

Можно выделить два типа ошибок: те, которые компилятор может найти, и те, которые не может. Первый тип называют ошибками компиляции (compile-time error). Их довольно легко найти, поскольку компилятор сам указывает место в программе, где встретилась ошибка. Правда, иногда описание ошибки бывает не совсем точным (компьютер так легко сбить с толку!), однако, зная капризы своего компилятора, нетрудно разобраться в его жалобах.

Ошибки, которые компилятор не может найти, проявляются при запуске программы и называются ошибками времени исполнения (run-time error). Их найти намного труднее, поскольку, кроме сообщения об ошибке, нет и намека на то, какая именно ошибка возникла и где (сообщения, которые генерируются при возникновении ошибок выполнения, вполне достойны звания ошибочных).

Для выявления жучков в программе обычно используется два метода. Первый - добавить отладочные команды, выводящие ключевые значения в ключевых точках программы. Увидев значения переменных в месте возникновения ошибки, можно понять, что именно неправильно в данной программе. Второй метод заключается в использовании специальной программы - отладчика. Отладчик позволяет отслеживать процесс выполнения программы.

использование oifucufOHHOU печхипи

Добавление команд вывода в ключев1х точках помогает понять, что происходит в программе, и называется методом отладочной печати (иногда именуемым WRITE). Метод WRITE появился во времена, когда программы писались на языке FORTRAN, в котором вывод осуществляется с помощью команды WRITE.



Приведенная ниже дефектная программа наглядно демонстрирует применение отладочных команд. Эта программа должна считывать последовательность чисел с клавиатуры и выводить их среднее арифметическое значение. Однако она не делает поскольку содержит две ошибки, одна из которых вызывает аварийный останов, а вторая приводит к неправильному результату.

- эта программа усредняла бы

ряд чисел, если бы не содержала

одну невыполнимою ошибку

iinciude <stdio.h>

#include <iostream.h>

int main(int argc, char* pszArgs[]) {

cout << Эта программа содержит ошибки!\n ;

аккумулирует ряд чисел, пока

ватель не введет отрицательное число, после чего выводит int nSum.;

for (int = 0; ; )

ждет ввода следующего числа int nValue;

cout << следующее

cin >> nValue;

если введенное число меньше нуля.. . if {nValue < 0)

вывести среднее

cout \пСреднее равно:

<<

<< \п ;

break;

если числ адьше нуля,

сложить его с аккумулятором nSum += nValue;

return 0;

После ввода этой программы создайте выполнимый файл (клавиша <F9>).

Запустите эту программу и введите числа 1, 2 и 3, а затем -1. Вы ожидаете увидеть, что их среднее равно двум? Вместо этого очевидного результата будет выдано довольно непривлекательное сообщение об ошибке, показанное на рис. 11.1.

Выявление жучка № 1

Сообщение об ошибке, приведенное на рис П.1, выглядит весьма внушительно. На самом деле большая часть информации в этом сообщении бесполезна для нас (как и для многих других). Но во второй строке есть намек на источник ошибки: Division by zero at ... (деление на ноль в . . .). Как можно понять, вовремя выполнения программы произошла попытка деления какой-то переменной на ноль (крайне информативно, не правда ли?). Определить источник ошибки не так уж



1 ... 32 33 34 [ 35 ] 36 37 38 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика