Блог → Как программировать грамотно на языке Си. Часть 2

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

Оптимизирующий компилятор позволяет также запросить использование аппаратурных возможностей процессора (например, генерацию команд процессора 286 или арифметического сопроцессора). В отличие от компилятора интегрированной среды оптимизирующий компилятор может создать файл объектного модуля в ассемблерном виде, который пригоден для обработки макроассемблером MASM, что дает пользователю возможность улучшить или изменить сгенерированный компилятором код на уровне ассемблерного кода. Система обеспечивает также возможность связи Си-программ с программами на ассемблере, Фортране и Турбо Паскале, которые объединяются с программами на Си, на этапе редактирования связей.

Библиотека функций

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

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

Многооконный отладчик

Автономный многооконный отладчик используется для отладки программ, обработанных компилятором интегрированной среды или оптимизирующим компилятором с установленным режимом отладки. Многооконный отладчик обеспечивает возможность отладки на уровне исходной Си-программы и на уровне ассемблерного кода и имеет два режима работы: режим оконных меню и команд, при котором может быть открыто несколько окон для наблюдения и управления различного рода информацией отладки, и режим диалоговых команд, вводимых с клавиатуры дисплея и позволяющих задавать в командах операнды.

Многооконный отладчик, кроме возможностей, реализованных во встроенном отладчике интегрированной среды Си, обеспечивает также возможность устанавливать условные точки прерывания, точки прерывания по изменению значений переменных, возможность модифицировать память, следить за значением и модифицировать содержимое регистров и флагов. Набор команд многооконного отладчика совместим с командами системного отладчика SYMDEB.

Цикл моих заметок о программировании на языке Си, как я предполагаю, будет состоять из четырех больших частей. В первой части я дам описание языка Си, реализованного в системе программирования C++. Это описание не является строго формализованным даже в части синтаксиса языка, скорее я следую сложившейся традиции в публикациях. Тем не менее, я поясню систему обозначений, принятую при описании синтаксиса языка, чуть подробнее.

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

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

Вторая часть заметок будет содержать некоторые рекомендации по программированию, отражающие специфические особенности реализации языка Си на 16-разрядном компьютере с сегментной архитектурой. Здесь же описывается организация связи программы на языке Си с программами на других языках (Ассемблер, Фортран и Паскаль).

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

И наконец, в четвёртой, заключительной части своих заметок, я опишу возможности и технику работы с меню в интегрированной среде Си при создании, корректировке, компиляции, отладке и выполнении программы на C++. В этой части, так же как и в остальных частях заметок, я буду использовать коды и названия клавиш клавиатуры ПЭВМ ЕС 1842. При этом названия клавиш обозначаются прописными буквами, а комбинации клавиш соединяются знаком плюс, например Ctrl+Z. Для других типов компьютеров названия клавиш и некоторые коды могут отличаться от используемых мною, и вам стоит иметь это в виду.