Программирование >>  Структурное программирование 

1 ... 15 16 17 [ 18 ] 19 20 21 ... 342


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

Этап 1:


Программа создается редактором и запоминается на диске

Этап 2:


Профамма

предварительной

обработки

преобразовывает код

Этап 3:


Компилятор создает объектный код и сохраняет его на диске

Этап 4:


Комлоновщик связывает объектный код с библиотеками, создает a.out и сохраняет его на диске

Этап 5:

Загрузчик

Первичная память

Диск

Первичная память

Этап 6:


Загрузчик размещает профамму в памяти

ЦПУ выбирает каждую инструкцию и выполняет ее, возможно сохраняя новые значения данных по мере выполнения программы

Рис. 1.1. Типичная среда программирования С++



Следующий этап называется компоновка. Программы на С++ обычно содержат ссылки на функции, определенные где-либо вне самой программы, например, в стандартных библиотеках или в личных библиотеках групп программистов, работающих над данным проектом. Объектный код, созданный компилятором, обычно содержит дыры из-за этих отсутствующих частей. Компоновщик связывает объектный код с кодами отсутствующих функций, чтобы создать исполняемый загрузочный модуль (без пропущенных частей). В типичной, основанной на UNIX, системе команда компиляции и компоновки программы на C+-I- обозначается как СС. Чтобы скомпилировать и скомпоновать программу по имени welcom.C, наберите по приглашению UNIX

СС welcom.C

и нажмите клавишу return (возврат каретки). Если программа скомпилирова-лась и скомпоновалась правильно, будет создан файл a.out. Это и есть исполняемый загрузочный модуль нашей программы welcome.С. Следующий этап называется загрузка. Перед выполнением программа должна быть размещена в памяти. Это делается с помощью загрузчика, который забирает исполняемый загрузочный модуль с диска и перемещает его в память.

Затем компьютер под управлением своего ЦПУ выполняет поочередно в каждый момент времени по одной команде программы. Чтобы загрузить и выполнить программу в системе UNIX, мы набираем по приглашению UNIX команду a.out и нажимаем клавишу return.

Программа редко работает с первой попытки. Каждый из описанных этапов может окончиться неудачей из-за разного типа ошибок, которые мы обсудим в этой книге. Например, исполняемая программа может пытаться разделить на нуль (операция, не разрешенная в компьютерах так же, как и в арифметике). Это приведет к печати компьютером сообщения об ошибке. Программист должен вернуться к этапу редактирования, внести необходимые исправления и снова провести программу через остальные этапы, чтобы убедиться в правильности сделанных исправлений.

Типичная ошибка программирования 1.1

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

Большинство программ на С++ вводят и выводят данные. Определенные функции С++ выполняют ввод из cin (the standard input stream - стандартный поток ввода; произносится как си-ин ), т.е. обычно с клавиатуры, но cin может быть связан и с другим устройством. Вывод данных производится в cout (the standard output stream - стандартный поток вывода; произносится как си-аут ), т.е. обычно на экран, но cout может быть связан и с другим устройством. Когда мы говорим, что программа печатает результат, мы обычно подразумеваем, что результат отображается на экране. Данные могут быть выведены и на другие устройства, например на диски или на принтер в виде твердой копии. Существует также стандартный поток ошибок (the standard error stream), который обозначается cerr. Поток cerr (обычно связанный с экраном) используется для отображения сообщений об



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

1.13. общие замечания о С++ и об этой книге

С++ - трудный язык. Иногда программисты, экспериментируюш;ие с С++, испытывают чувство гордости за то, что они оказались способны создать на нем хоть что-то, пусть и с грубым, искаженным и искривленным применением языка. Это - скверный стиль программирования. Программы получаются трудными для чтения, увеличивается вероятность их странного поведения, затрудняется их тестирование, отладка и адаптация к изменяюш;имся требованиям. Данная книга предназначена для программистов-новичков, поэтому мы делаем упор на ясность. Ниже приведен наш первый совет по хорошему стилю программирования .

Хороший стиль программирования 1.1

Пишите программы на С++ в простом и четком стиле. Об этом иногда говорят как о KIS ( кеер it simple - придерживайтесь простоты). Не насилуйте язык попытками его причудливого использования.

Мы будем давать много таких советов на протяжении всей книги, чтобы обратить ваше внимание на практические приемы, помогаюш;ие писать программы более ясные, более понятные, обеспечиваюш;ие удобство сопровождения, простые для проверки и отладки. Эти практические советы являются лишь путеводными вехами; вы, без сомнения, выработаете свой собственный стиль программирования. Мы будем также обраш;ать ваше внимание на типичные ошибки программирования (с целью предостеречь вас от повторения этих ошибок в своих программах), давать советы по повышению эффективности (приемы, которые помогут вам писать программы, работаюш;ие быстрее и используюш;ие меньше памяти), советы по мобильности (приемы, которые помогут вам писать программы, выполняемые на разных компьютерах с минимальными доработками или вообш;е без них) и советы по технике программирования (мысли и идеи, затрагиваюш;ие и улучшаюш;ие обт;ую архитектуру систем программного обеспечения и, в частности, больших программных систем).

Вы только что услышали, что С и С++ - это мобильные языки и что написанные на них программы могут выполняться на многих разных компьютерах. Мобильность (переносимость) - это несбыточная мечта. Стандарт ANSI С содержит длинный перечень дискуссионных вопросов мобильности, были написаны целые книги, в которых обсуждается мобильность языка С.

Замечание по 1.3

Написать мобильную (переносимую) программу можно, но для разных компиляторов С и С++ и для разных компьютеров возникнет множество проблем, которые могут сделать мобильность труднодостижимой. Само по себе написание программ на С и С++ еще не обеспечивает мобильность. Программист будет вынужден часто считаться с особенностями разновидностей компиляторов и компьютеров.



1 ... 15 16 17 [ 18 ] 19 20 21 ... 342

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