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

на главную

Жанры

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

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

Шрифт:

Листинг 4.11

//Блок 17

void f5{

mm[0] = \0;

//Объявляем массив символов и инициализируем его строкой из 9 элементов

char p[]="Crocodile!";

//Выводим в строку значения элементов массива как символы

for (int i = 0;i<10; sprintf(nn,"%c", p[i]), strcat(mm, nn), i++);

strcat(mm,"\n");

//Устанавливаем указатель на первый элемент массива и, последовательно

//перебирая элементы (увеличивая значение указателя), получаем значения,

//записанные в них в виде целых чисел

for (char* t=p;*t!=0; sprintf(nn,"%u", *t), strcat(mm, nn), strcat(mm," "), t++);

strcat(mm,"\n");

//Устанавливаем указатель на первый элемент массива и, последовательно

//перебирая элементы массива, получаем в строку их адреса

for (char* s=p;*s!=0; sprintf(nn,"%p", s), strcat(mm, nn), strcat(mm,"\n"), s++);

mbstowcs(mstr, mm, 256);

szStr = mstr;

}

Вся функциональность достаточно хорошо описана в комментариях. Но также следует обратить внимание на то, как оформлены циклы. Оказывается цикл for можно весь уложить в одну строку, записав все необходимые

операции в заголовок.

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

Структуры

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

struct mystruct {… };

Членами структуры могут быть данные любого типа и битовые поля , которые не могут использоваться только в структурах, объединениях или классах. Обработка структур в С++ практически ничем не отличается от обработки классов. После объявления структуры определенного типа разработчик может объявить переменную этого типа, как это показано в следующем примере.

struct mystruct{… } s, *ps, arrs[10]; mystruct s1;

Возможно также объявление неименованной структуры. Оно имеет смысл только тогда, когда тут же объявляются переменные этого типа. Для неименованной структуры невозможно объявить переменные этого типа в другом месте. Этот механизм демонстрирует следующий фрагмент кода:

struct {… } s, *ps, arrs[10];

Есть возможность создать typedef для неименованной структуры, как это показано ниже.

typedef struct {… } MYSTRUCT; MYSTRUCT s, *ps, arrs[10];

Оператор typedef можно использовать и для именованной структуры, если согласно логике программы в этом есть какой-то смысл.

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

Битовые поля структур Битовые поля это определенное количество именованных или не именованных битов, которое является членом структуры (объединения, класса). Объявляется битовое поле следующим образом:

type-specifier <bitfield-id>: width;

В С++ спецификатором типа может быть любое беззнаковое целое.

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

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

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

? Доступ к битовому полю х при помощи выражения вроде mystruct.x корректен, а получение адреса & mystruct.x невозможно в принципе, поскольку mystruct.x не хранится в байте.

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

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

Упражнение 4.1 (продолжение)

21. Добавить новый блок в основную рабочую последовательность, код которого приведен в листинге 4.12.

Листинг 4.12

//Блок 18

void f6{

mm[0] = \0;

struct mystruct {

int d;

double e;

unsigned short mybit: 2;

mystruct* s;

int myfunc(int g)

{return g*g;};} mystr;

mystruct* pmy = &mystr;

mystr.s = pmy;

mystr.d = 100;

pmy->e = 300.00;

mystr.mybit = 3;

sprintf(nn,"%f", pmy->e);

strcat(mm, nn);

strcat(mm, « – pmy->e\n»);

sprintf(nn,"%d", mystr.d);

strcat(mm, nn);

strcat(mm, « – mystr.d\n»);

sprintf(nn,"%p", mystr.s);

strcat(mm, nn);

strcat(mm, « – mystr.s\n»);

sprintf(nn,"%d", mystr.myfunc(12));

strcat(mm, nn);

strcat(mm, « – mystr.myfunc(12)\n»);

sprintf(nn,"%d", pmy->myfunc(12));

strcat(mm, nn);

strcat(mm, « – pmy->myfunc(12)\n»);

sprintf(nn,"%d", mystr.mybit);

strcat(mm, nn);

strcat(mm, « – mystr.mybit\n»);

mbstowcs(mstr, mm, 256);

szStr = mstr;

}

Этот код будет выполняться при нажатии клавиши 6 на клавиатуре.

Объединения

Объединение объявляется при помощи ключевого слова union. Объединения очень похожи на структуры, и главное их отличие от структур заключается в том, что разработчик может пользоваться только одним из членов объединения в конкретный момент времени. Практически мы можем трактовать объединение как своего рода объект с переключающимся типом или переменную типа variant. В тот момент, когда одному из членов объединения присваивается значение, остальные члены объединения содержат непредсказуемые значения и обращаться к ним не стоит. Результат этого действия нельзя будет предсказать.

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

Среда разработки eMbedded Visual C++ 3.0

Несмотря

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

Окна

Главное окно среды представляет собой окно в стиле SDI, когда все прочие документы и окна открываются в главном окне и не могут покинуть его пределы. Таким образом, главное окно является контейнером для других окон. На нем размещены панель инструментов и главное меню (рис. 4.1).

Рис. 4.1. Главное окно среды.

Остальные окна могут быть выведены на экран или скрыты в зависимости от режима работы. Основным рабочим окном является окно Workspace (рис. 4.2).

Рис. 4.2. Окно Workspace со всеми вкладками.

В окне Workspase может находиться от одной до трех вкладок. Если был создан проект, то в окне Workspase появится вкладка FileView. Если в проекте есть классы, то будет добавлена вкладка ClassView, а если к проекту подключены какие-то ресурсы, то вкладка ResourceView незамедлительно объявится внизу окна. Каждая из вкладок отображает структуры файлов, классов и ресурсов, включенных в проект, в виде дерева с раскрывающимися узлами. Щелчок на узле приводит к его раскрытию, а двойной щелчок на конечном элементе – к открытию данного элемента для редактирования. Если щелкнуть на имени файла в окне FileView, то этот файл будет открыт в окне редактора кода. При щелчке на имени класса в окне ClassView, на экран будет выведен файл, в котором объявлен данный класс. Двойной щелчок на одном из имен ресурсов приведет к открытию данного ресурса в соответствующем ему редакторе ресурсов. Таким образом, взаимодействие с окном Workspace может повлечь за собой появление множества окон редакторов разного типа.

Окно Output (рис. 4.3) отображает информацию на выходе того или иного режима работы среды.

Рис. 4.3. Окно Output.

В этом окне обычно отображаются четыре вкладки, которые перечислены в следующем списке.

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

? Вкладка Debug отображает информацию о загружаемых модулях и библиотеках, выводит сообщения в режиме отладки.

? Вкладки Find in Filesl и Find in Files2 содержат информацию о результатах поиска.

Кроме перечисленных стандартных окон на экран могут быть выведены окна режима отладки. О них будет сказано в соответствующем разделе.

Окна в eVC могут находиться как в режиме Docked, когда окно «прилипает» к одной из сторон основного окна или к другому окну, так и в режиме Undocked, когда окно свободно перемещается по экрану. Управлять этими режимами можно при помощи команды Docking View в контекстном меню окна либо при помощи команды меню Tools ? Options… ? Workspace ? Docking Views. Пройдя по данной цепочке, можно обнаружить список открытых окон. Установка флажка против соответствующего окна включает его свойство Docking.

У окон Workspace и Output в контекстном меню есть команда Hide, позволяющая скрыть данное окно. Вывести окно на экран после вскрытия можно командой View ? Workspace (View ? Output). Кроме этого отображением этих окон еще управляют инструменты со стандартной панели инструментов.

? вывести/скрыть окно Workspace.

? вывести/скрыть окно Output.

? Полностью за управление состоянием и свойствами окон отвечает пункт меню Window. Его команды приведены в следующем списке.

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

? Команда Split разбивает текущее окно на четыре части крестообразным разделителем. Каждая из частей отображает один и тот же документ, но в каждой части можно установить свое положение текстового курсора. После разбиения можно перетащить вертикальный разделитель к левому или правому краю, и окно будет разбито на две части по горизонтали. Подобным образом можно поступить и горизонтальным разделителем.

? Команда Docking View переключает состояние Docking/UnDocking для активного окна.

? Команда Close закрывает активное окно в редакторе.

? Команда Close All закрывает все открытые окна проекта.

? Команда Next, Prevouse осуществляет переход вперед и назад по списку открытых окон. Активизируемое окно выводится на передний план.

? Команды Cascade, Tile Horizontally, Tile Vertically размещают все окна каскадом, по горизонтали или по вертикали соответственно.

? Команда Windows… выводит на экран список открытых окон

Настройка панелей инструментов и меню

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

Рис. 4.4. Окно команды Customize.

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

Идеальный мир для Социопата 5

Сапфир Олег
5. Социопат
Фантастика:
боевая фантастика
рпг
5.50
рейтинг книги
Идеальный мир для Социопата 5

Титан империи 2

Артемов Александр Александрович
2. Титан Империи
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Титан империи 2

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

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Наследник старого рода

Шелег Дмитрий Витальевич
1. Живой лёд
Фантастика:
фэнтези
8.19
рейтинг книги
Наследник старого рода

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Младший научный сотрудник

Тамбовский Сергей
1. МНС
Фантастика:
попаданцы
альтернативная история
6.40
рейтинг книги
Младший научный сотрудник

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Измена. Он все еще любит!

Скай Рин
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Измена. Он все еще любит!

Сумеречный Стрелок 4

Карелин Сергей Витальевич
4. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 4

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

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