Лекция 9 (C/C++). Стиль программирования. Структуры в Си. Объединения - union

Содержание

Слайд 2

Язык Си (Cи++) является высокоуровневым искусственным языком для разработки программ. Си-подобные

Язык Си (Cи++) является высокоуровневым искусственным языком для разработки программ.
Си-подобные языки

используются для программирования различного вида аппаратуры.
Главное:
Развитие ПО опережает развитие аппаратуры.
Слайд 3

Стиль программирования организация программного кода в соответствии с определенными правилами. int

Стиль программирования

организация программного кода в соответствии с определенными правилами.

int a=0,w,x=0;
while(a==0)
{w=w+1;
x--;
}

int a=0;
int

w;
int x=0;
while(a==0)
{
w=w+1;//Error
x--;
}
Слайд 4

Стиль программирования вырабатывается по мере получения опыта и зависит от самодисциплины

Стиль программирования вырабатывается по мере получения опыта и зависит от самодисциплины

программиста.
Единого стиля нет. Существуют рекомендации, которым следует придерживаться, так как они были выработаны в ходе программи-рования миллионов строк кода миллионами людей.
Слайд 5

Основная цель стиля программирования Это организация кода: легче искать ошибки; легче

Основная цель стиля программирования

Это организация кода:
легче искать ошибки;
легче и быстрее разбираться

в своей и чужой программе;
«красота программного кода».
Слайд 6

Рекомендации корректность, ясность и простота; имена по Венгерской нотации; комментируйте и

Рекомендации

корректность, ясность и простота;
имена по Венгерской нотации;
комментируйте и документируйте код;
не допускайте

дублирования кода;
инициализировать переменные перед их использованием;
не используйте неизвестные аргументы в функциях (троеточия);
устраняйте все ошибки и замечания;
одна функция – одна задача.
Слайд 7

Структуры в Си это сложный тип данных представляющий собой упорядоченное в

Структуры в Си

это сложный тип данных представляющий собой упорядоченное в памяти

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

Синтаксис: struct [имя типа] { поле_1; поле_2; ... поле_N; } [список переменных];

Синтаксис:

  struct [имя типа]   {    поле_1;    поле_2;    ...    поле_N;   } [список переменных];

Слайд 9

Структура представляет собой объект с набором различных параметров – полей. Объектами

Структура представляет собой объект с набором различных параметров – полей.
Объектами могут

быть различные предметы из реального или программного мира.
Обычно структуры записывают в отельный модуль «.h» файл.
Например, любой автомобиль можно описать с помощью набора определенных свойств (параметров, полей).
Слайд 10

Пример объявления структуры struct _Auto { int year; int color; char

Пример объявления структуры

struct _Auto
{
int year;
int color;
char title[100];
}; ←!!!

void main(void)
{
_Auto myAuto;
}

Слайд 11

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

Обращение к полям

выполняется с использованием оператора точки «.» для записи и

извлечения значения;

myAuto.year = 2014;
myAuto.color = 0; //0-черный
strсpy(myAuto.title,"Volga");

printf(“%d”,myAuto.year);

Слайд 12

Размер структуры Используется функция sizeof(): Синтаксис: sizeof(имя структуры) Например, int sizeAuto = sizeof(myAuto); //sizeAuto=108 байт

Размер структуры

Используется функция sizeof():
Синтаксис:
sizeof(имя структуры)
Например,

int sizeAuto = sizeof(myAuto); //sizeAuto=108

байт
Слайд 13

Копирование структур Функция memcpy (небезопасная) или memmove (безопасная). Синтаксис: memcpy (адрес

Копирование структур
Функция memcpy (небезопасная) или memmove (безопасная).
Синтаксис:
memcpy (адрес назначения, адрес

источника, размер);
memmove (адрес назначения, адрес источника, размер);

_Auto myAuto2;
memcpy(&myAuto2,&myAuto, sizeof(_Auto));
memmove(&myAuto2,&myAuto, sizeof(_Auto));

Слайд 14

Массив структур struct _Auto { unsigned char actual; int year; int

Массив структур

struct _Auto
{
unsigned char actual;
int year;
int color;
char title[100];
};

const int NAUTO=10;
_Auto allAuto[NAUTO];
int

iAuto;
for ( iAuto=0; iAuto if (allAuto[iAuto].actual) {
printf ("%d %d %s",allAuto[iAuto].year, allAuto[iAuto].color, allAuto[iAuto].title);
}
}
Слайд 15

Функции в структурах struct _Auto { unsigned char actual; int year;

Функции в структурах

struct _Auto
{
unsigned char actual;
int year;
int color;
char title[100];
_Auto() //Функция установки полей
{ //по

умолчанию - конструктор
actual = 1;
year = 2001;
color = 0;
strcpy(title,«NoName");
}
};
Слайд 16

Поля структур могут быть Открытого типа – public; Закрытого типа –

Поля структур могут быть

Открытого типа – public;
Закрытого типа – private.
Инкапсуляция –

разделение прав доступа к полям структуры.
В полях с Private напрямую извне изменить или прочитать данные из полей нельзя, только через функции структуры.
Слайд 17

struct _Auto { public: const int nTitle = 100; _Auto() {

struct _Auto
{
public:
const int nTitle = 100;
_Auto()
{
year = 2001;
color = 0;
strcpy(title,"sf");
}
void setYear(

int year_)
{
year = year_;
}
int getYear(void)
{
return year;
}
private:
int year;
int color;
int title[nTitle];
};

В public указываются, например, константы, а также функции которые могут вызываться извне. Конструктор в public указывать обязательно.

//Пример
_Auto myAuto;
myAuto.setYear(2010);

Блок private рекомендуется указывать после public

Слайд 18

Объединения - union Объединения - это объект, позволяющий нескольким переменным различных

Объединения - union

Объединения - это объект, позволяющий нескольким переменным различных типов

занимать один участок памяти.
Все элементы объединения начинаются с одного адреса.
Размер объединения равен максимальному размеру типу данных.
Слайд 19

Разделение целого числа на байты union _Int32ForByte { unsigned long int32;

Разделение целого числа на байты

union _Int32ForByte
{
unsigned long int32;
unsigned char b[4];
};

void main(void)
{
_Int32ForByte

l4b;
l4b.int32=0x04030201; //0x - 16ричная запись
printf("%d %d %d %d“, l4b.b[3], l4b.b[2], l4b.b[1],l4b.b[0]);
}