Чтение онлайн

на главную

Жанры

Программирование для карманных компьютеров

Волков Владимир

Шрифт:

Рис. 4.18. Окно настройки среды Options.

? Назначение вкладок и элементов управления в этом окне рассматривается ниже. Вкладка Editor – настройки параметров редактора

Органы управления, располагающиеся в группе Window settings, рассматриваются в следующем списке.

? Vertical scroll bar – отображать вертикальную полосу прокрутки.

? Automatic window recycling – использовать окно редактирования кода для отображения окон с другой функциональностью вместо открытия нового окна.

? Drag-and-drop text editing – позволять перетаскивание выделенного текста при редактировании.

? Horizontal scroll bar – показывать горизонтальную полосу прокрутки.

? Selection margin – показывать левое поле в окне редактора кода.

Чтобы задавать параметры сохранения файлов, используются органы управления, располагающиеся в группе Save Options. Они описываются в следующем списке.

? Save before running tools – сохранять файлы, открытые в редакторе, перед запуском скопмилированной программы.

? Automatic reload of externally modified files – заново открывать файлы, которые были изменены вне среды.

? Prompt before saving files – запрашивать разрешение на сохранение файла.

При работе с кодом разработчик может пользоваться автозавершением набираемых конструкций. Параметры этого механизма задаются в группе Statement complition options. Расшифровка соответствующих органов управления приведена в следующем списке.

? Auto list members – вызывать список автозавершения классов или структур при вводе знаков точки или стрелки

вправо. Этот список можно вызвать в любой момент, нажав сочетание клавиш Ctrl+Alt+T.

? Auto type info – автоматически показывать на всплывающем ярлычке информацию о типе переменной при перемещении указателя мыши над именем переменной. Этого же эффекта можно добиться, поместив текстовый курсор внутрь имени переменной и нажав сочетание клавиш Ctrl+T.

? Code comments – при выводе списка автозавершения справа от него на всплывающем ярлычке будут показаны комментарии, сопровождающие объявление этого имени.

? Auto parametr info – автоматический вывод списка параметров для функции при вводе открывающей круглой скобки после имени функции.

Вкладка Tabs

На этой вкладке разработчик может установить размер и правила установки отступов для файлов разного типа.

? File Type – тип файла, для которого устанавливаются параметры.

? Tab size – размер отступа при нажатии клавиши Tab в символах.

? Indent Size – размер отступа, в символах.

? Indent Spaces\Kepp Tabs – заполнять отступы пробелами или оставлять вместо них знаки табуляции.

В группе Auto indent можно указать правила использования отступа в редакторе кода.

? none – не включать автоматический отступ.

? default – оставить значения для данного типа файла по умолчанию.

? Smart – включить «умный» отступ, который будет выглядеть, как ступенчатый отступ для вложенных блоков, и сохранять отступ предыдущей строки.

Дополнительные параметры отступа настраиваются в группе Smart indents options.

? Indent open brace – включать отступ для открывающей скобки.

? Indent closing brace – включать отступ для закрывающей скобки.

? NN pevous lines using for context – применять правила отступа, выработанные на основе анализа предыдущих строк кода.

Вкладка Debug

На этой вкладке разработчик может настраивать правила отладки приложений. Расшифровка соответствующих органов управления приводится в следующем списке.

? GUID display – типы, основывающиеся на GUID, будут названы в соответствующем окне по имени, если оно будет найдено в реестре, или в форме числового представления GUID.

? View floating-point registers – показывать содержание регистров операций с плавающей точкой в окне Register.

? Return value – показывать значение, возвращаемое функциями, в окне Variables.

? Load COFF & Exports – загружать отладочную информацию в COFF-формате и информацию об экспортируемых функциях DLL.

Параметры, позволяющие регулировать порядок отображения информации при дизассемблировании программы, находятся в группе Disassembly window. Они рассматриваются в следующем списке.

? Source annotation – сопровождать листинг на языке ассемблера строками исходного кода в соответствующих местах.

? Code bytes – показывать машинный код параллельно командам ассемблера.

? Symbols – показывать символические имена адресов переменных или имена программы.

Параметры окна вызовов устанавливаются в группе Call stack window. Флажок Parameter values отвечает за отображение значений, переданных как параметры при вызове функции, а флажок Parameter types позволяет показывать типы параметров функций.

За отображение содержимого памяти отвечают органы управления, собранные в группе Memory window. Их предназначение указано в следующем списке.

? Adress – начальный адрес для выводимого на экран блока памяти.

? Format – выбор формата, в котором будет отображено содержимое выводимого на экран блока памяти.

? Re-evaluate expression – вычислять значения вводимых в окно выражений Memory.

? Show data types – показывать данные как числовое отображение содержимого байтов помимо выбранного формата.

? Fixed width – ширина столбца для отображения данных.

Вкладка Compatibility

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

? Current source editor emulation – список популярных редакторов кода, параметры которых эмулирует eVC.

? Options – список параметров.

• Disable backspace at start of line – предотвращать непроизвольное слияние строк при помощи размещения в начале каждой строки символа Backspace.

• Enable copy without selection – включить копирование строки, в которой находится курсор, если нет выделенного фрагмента текста.

• Enable line-mode pastes – помещенные в буфер строки кода будут скопированы над текущей строкой, а не в позицию курсора.

• Enable virtual spaces – позволить курсору перемещаться за пределы конца файла.

• Include caret position in undo buffer – при отмене удаления восстанавливать позиции символов перевода строки.

• Indent separate paragraf – трактовать каждую строку, начинающуюся с символа табуляции, как новый абзац.

• Protect read-only files from editing – не редактировать файлы, помеченные атрибутом «только для чтения».

• Use BRIEF\'s regular expression syntax – использовать для символов подстановки синтаксис BRIEF.

• Double-click in dialod editor edit code (MFC only) – двойной щелчок на управляющем элементе в редакторе диалогового окна показывает относящийся к этому элементу код в окне редактора кода.

Вкладка Download

На этой вкладке задаются параметры выгрузки файлов на целевое устройство. Расшифровка соответствующих органов управления приведена в следующем списке.

? Always dounload binary to the target – при каждой перекомпиляции проекта заново загружать бинарные файлы на устройство.

? Always dounload dependencies to the target – при каждой перекомпиляции проекта загружать все связанные файлы на устройство.

? Connection timeout – позволяет указать время соединения, после которого попытка загрузить файлы на устройство считается неудачной.

Вкладка Build

На этой вкладке разработчик может задать параметры компиляции проекта.

? Export makefile when saving project file – при каждом сохранении текущего проекта экспортировать Makefile.

? Always write dependencies when writing makefiles – при сохранении Makefile сохранять файл зависимостей.

? Write Build Log – сохранять файл отчета о компиляции.

Вкладка Directories

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

? Platform – платформа, для которой настраивается конфигурация.

? CPUs – процессор, для которого настраивается конфигурация.

? Show directory for – функциональная группа файлов, для которой настраивается конфигурация.

? Directories – список соответствующих каталогов для данной группы файлов. При помощи кнопок в верхнем правом углу окна к списку могут быть добавлены новые каталоги, удалены существующие каталоги или изменен порядок их просмотра.

Вкладка Workspace

Вкладка Workspace позволяет настраивать параметры используемых рабочих пространств.

? Docking view – список окон, которые по умолчанию будут отображаться в фиксированном месте среды. Если флажок у того или иного окна снять, то соответствующее окно будет выведено в «плавающем» состоянии.

? Display status bar – отображать состояние выбранного окна в строке состояния.

? Display clock on status bar – отображать часы на строке состояния.

? Reload documents when opening workspace – восстанавливать позиции всех окон с открытыми в них документами в том состоянии, которое было зарегистрировано на момент предыдущего закрытия проекта.

? Reload last workspace on startup – при запуске среды загружать последнее рабочее пространство, с которым работал программист.

? Automatically sort window menu – часто используемые окна автоматически помещаются в начало списка меню Windows.

? Use screen reader compatible menus – использовать меню, совместимые с программами для людей с ограниченными возможностями зрения.

? Show recently used items on submenu – показывать список недавно открытых файлов и рабочих пространств на отдельных подменю.

? Window menu contains – количество окон, отображаемых в меню Windows.

? Recent file list contains – количество файлов в списке недавно открытых файлов.

? Recent workspace list contains –

количество рабочих пространств в списке недавно открытых рабочих пространств.

Вкладка Macros

На этой вкладке задаются параметры выполнения макрокоманды, если ее текст был ранее изменен.

? Always reload the file – всегда загружать измененный файл.

? Never reload the file – никогда не загружать изменный файл.

? Ask whether to reload the file – запрашивать разрешение на загрузку измененного файла.

Вкладка Format

На этой вкладке задаются параметры форматирования исходного кода.

? Category – указывает группу элементов, к которой будет применяться выбранный формат.

? Font – имя шрифта для отображения.

? Size – размер шрифта.

? Colors – для какого элемента экрана будет применен данный цвет.

? Foreground – цвет элемента.

? Background – цвет подложки.

Дополнительные сведения о языке C++

Файлы программы и единицы компиляции

При создании программ на языке C++ следует иметь в виду, что программирование на этом языке опирается на модульный принцип построения программы. Это значит, что программа, которая в результате выглядит как один файл с расширением. exe, во время разработки может состоять из множества файлов с расширением. cpp и.h. Файлы с расширением. cpp называются исходным кодом, а файлы с расширением. h – заголовочными файлами или заголовками. Поскольку каждый файл исходного кода подается на вход компилятора и из него образуется файл промежуточного объектного кода, файлы исходного кода являются единицами компиляци. Процесс создания программы состоит из трех этапов.

1. Работа препроцессора. На этом этапе директивы препроцессора заменяются кодом на языке C++. Чтобы облегчить работу программиста, в исходных кодах существует возможность указывать, какую часть кода надо компилировать, а какую пока не стоит. Есть возможность помещать в исходный код выражения, которые к началу компиляции должны превратиться в константы того или иного типа, есть возможность указывать, что в некое место файла исходного кода должен быть вставлен текст из другого файла. Результатом работы препроцессора является файл, в котором все эти действия выполнены и который можно подавать на вход компилятора.

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

3. Работа линковщика. Файлы объектного кода связываются между собой в единый исполняемый файл с расширением. exe.

В общем случае за то, какие именно файлы будут обработаны препроцессором, скомпилированы, а потом собраны в исполняемый файл, отвечает специальная программа управления проектами. В большинстве версий языка С++ эта программа носит название make. На вход программы make подается специальный файл (makefile), в котором описывается состав проекта, опции препроцессора, компилятора и линковщика для каждой единицы компиляции, список доступных каталогов и прочие необходимые сведения. В случае eVC все стадии создания файла программы от работы препроцессора до линковки обычно не видны разработчику. Он лишь выполняет команду Build или Execute из пункта меню Build, и весь процесс выполняется за один шаг. Тем не мене в реальности «за ширмой» среды выполняются все этапы, и в качестве файла конфигурации проекта выступает файл с расширением. vcp.

Препроцессор и заголовочные файлы

Файлы заголовков

Файлы заголовков предназначены для хранения определений, которые одновременно применяются в нескольких единицах компиляции, и для объявления имен, которые должны быть видимы более чем в одном модуле программы. В файлах заголовков также объявляются имена и функции, реализация которых находится в бинарных файлах. Использование заголовочных файлов сокращает размер исходных текстов программы, поскольку в сами файлы исходных текстов вставляются только ссылки на заголовочные файлы (при помощи директивы #include). Эти ссылки заменяются текстом заголовочного файла в процессе работы препроцессора.

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

1. Объявления функций, которые могут быть использованы в нескольких модулях.

2. Описания классов.

3. Описания внешних переменных.

4. Определения макросов.

5. Определения типов, доступных для всего проекта.

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

Упражнение 4.7

1. Создать простое приложение и сохранить его с именем AdvancedCPP.

2. На вкладке FileView отыскать файл newres.h и двойным щелчком открыть его в редакторе кода. Поскольку этот файл содержит в себе множество директив препроцессора, он послужит хорошей иллюстрацией к их описанию.

Директива #include задает включение в текст данного файла текста другого файла, имя которого указано после директивы. В файле newres.h есть несколько директив #include.

#include <commctrl.h>

Выполнение этой инструкции приведет к тому, что перед компиляцией в этом месте в текст файла newres.h будет включен текст файла commctrl.h, но только для подачи на вход компилятору. Текст файла newres.h, хранимый на диске, изменен не будет.

Директива #define используется для создания символических констант, для определения макрофункций и для определения управляющего идентификатора.

3. Найти в редакторе кода следующую строку:

#define AFXCE_IDR_SCRATCH_SHMENU 28700

Эта строка создает символическую константу AFXCE_IDR_SCRATCH_SHMENU со значением 28700. Теперь компилятор, обнаружив в тексте программы имя AFXCE_ IDR_SCRATCH_SHMENU, будет вместо него подставлять значение 28700. 4. Открыть в окне FileView файл aygshell.h. В этом файле нужно найти следующую строку кода:

#define CEM_UPCASEALLWORDS (WM_USER + 1)

Данное объявление говорит о том, что препроцессор, встретив вызов макрофункции CEM_UPCASEALLWORDS, вместо имени подставит выражение (WM_USER + 1). Макрофункция, как и любая другая функция, может принимать параметры. К примеру, объявление #define MF(a, b, c) (a*b*c/(a+b+c)) далее в тексте может быть использовано как MF(x, y, z). Вместо имени фунции с заданными аргументами препроцессор вставит тело функции, то есть (x*y*z/(x+y+z)). Файл newres.h начинается со строк:

#ifndef __NEWRES_H__ #define __NEWRES_H__

а завершается строкой:

#endif //__NEWRES_H__

Эти строки показывают еще одно применение директивы #define. Выражение #define __NEWRES_H__ при обработке препроцессором приведет к замене имени __NEWRES_H__ простым пробелом. На самом деле это выражение служит маркером для выполнения условной компиляции или условного включения. Таким образом, директива #define позволяет определить имя, которое нигде не появится в конечном тексте программы ни в виде символа, ни в виде значения, но будет служить условием выбора для самого препроцессора.

Эти строки дают возможность перейти к директивам условной компиляции (условного расширения). К этим директивам относятся #if, #ifdef, #ifndef, #endif, #else и #elif.

Директива условной компиляции #if позволяет управлять процессом компиляции проекта. Если выражение const_exp, стоящее после директивы #if в конструкции #if const_exp, имеет ненулевое значение, то текст, следующий за директивой #if до соответстующей ей директивы #endif, будет включен в текст, подаваемый на вход компилятора (а значит, и скомпилирован). В противном случае этот текст не попадет на вход компилятора и не войдет в программу.

Если имя ident, стоящее после директивы #ifdef в конструкции #if ident, определено в тексте программы, то текст, следующий за директивой #ifdef до соответстующей ей директивы #endif, будет включен в текст, подаваемый на вход компилятора.

Если имя ident, стоящее после директивы #ifndef в конструкции #ifndef ident, не определено в тексте программы, то текст, следующий за директивой #ifndef до соответствующей ей директивы #endif, будет включен в текст, подаваемый на вход компилятора.

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

Листинг 4.30

#if cnst_ex1//Если выражение const_exp1 имеет значение true,

[text1]//тогда расширяется text1

[#elif cnst_ex2//иначе если cnst_ex2 имеет значение true,

text2]//тогда расширяется text2

[#elif cnst_ex3//иначе если cnst_ex3 имеет значение true,

text3]//тогда расширяется text3 … и так далее.

[#elif cnst_exN//если не был расширен ни один из предыдущих блоков,

textN]//расширяем текст textN

#endif//и завершаем блок условной компиляции

Поделиться:
Популярные книги

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Провинциал. Книга 6

Лопарев Игорь Викторович
6. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 6

Эфир. Терра 13

Скабер Артемий
1. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфир. Терра 13

Её (мой) ребенок

Рам Янка
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Её (мой) ребенок

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3

Великий князь

Кулаков Алексей Иванович
2. Рюрикова кровь
Фантастика:
альтернативная история
8.47
рейтинг книги
Великий князь

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Невеста вне отбора

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Невеста вне отбора

Адепт: Обучение. Каникулы [СИ]

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.15
рейтинг книги
Адепт: Обучение. Каникулы [СИ]

Мимик нового Мира 8

Северный Лис
7. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 8

Утопающий во лжи 3

Жуковский Лев
3. Утопающий во лжи
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Утопающий во лжи 3