Файл: описание микроСи .doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.07.2024

Просмотров: 66

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

long double (1,5*1045…3,4*1038) - 4 байта

Перечислимые типы определяют упорядоченное множество идентификаторов, представляющих собой возможные значения переменных этого типа. Вводятся для того, чтобы сделать код более понятным, например, пусть в переменной Mode зафиксированы режимы работы приложения: чтение, запись, редактирование. Можно присвоить переменной тип int и в нужном месте программы присваивать ей условные числа: 0-режим чтения, 1 – режим редактирования, 2-режим записи. Тогда программа будет содержать операторы вида

if (Mode==1)… ;

Однако, через некоторое время оператор забудет, что означает «режим 1», а что «режим 0» или «режим 2», поэтому можно объявить переменную Mode как переменную перечислимого типа и обозначить ее возможные значения как Read, Edit,Write и тогда приведенный выше оператор будет иметь вид:

if (Mode==Edit) …;

Определение переменных этого типа: enum{<константа1 >, …, <константа n>}<имена переменных>;

enum colors { Read, Edit, Write } Mode;

В момент объявления переменная инициализируется значением первой константы (в примере - Read), потом ей можно присваивать любые значения, например, Mode=Edit, к ним можно применять операторы сравнения: If(Mode<Edit) …;

Тип void указывает на то, что функция не возвращает никаких значений или не получает никаких параметров или создает нетипизированные указатели.

void print_temp (char temp) //функция print_temp не

// возвращает никаких значений

{

Lcd_Out_Cp(“temperature:”);

Lcd_Out_Cp (temp);

Lcd_Out_Cp(223);

Lcd_Out_Cp(‘C’);

}

Указатель – это адрес переменной в памяти. Зная адрес переменной, можно упростить работу программы. Основные назначения указателей: 1) предоставляют быстрое обращение к элементам массива, 2) позволяют функциям модифицмровать передаваемые параметры, 3) поддерживают динамические структуры данных, например списки.

Объявление указателя. Указатель объявляется так же как и любая переменная, но перед идентификатором добавляется *. * - унарный оператор, возвращающий значение переменной по указанному адресу, например, если m содержит адрес переменной с, то g=*m помещает значение с в g.

тип *имя_указателя // неинициализированный указатель

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


Одномерный массив. Объявление такого массива:

тип имя_переменной [размер]

У всех массивов первый индекс 0, поэтому в массиве char p [10];, содержащем 10 элементов, индексы элементов будут 0…9.

Многомерные массивы. Простейший пример многомерных массивов - двумерные. Двумерный массив – это массив одномерных массивов. Объявляется следующим образом:

Тип имя_массива [размер 2-го измерения] [размер 1-го измерения]

Первое измерение – количество строк, второе – количество столбцов. Например, массив размером 10 столбцов на 20 строк объявляется как int d [10] [20];.

Инициализация массива:

одномерный массив: int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

двумерный массив: int m[3] [2]={{1,2},{2,3},{3,4}};

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

Объявление структуры сопровождается ключевым словом struct, например:

struct addr // addr - ярлык

{

char name[20]; //тип имя_переменной

char street[40];


Int state[2];

};

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

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

Объявление объединения начинается с ключевого слова union:

union union_type

{

int i;

char d;

};

Для объявления переменной cntv объединения union_type нужно написать:

union union_type cntv;

Для доступа к элементам объединения используется точка, например:

cntv.i=10;

Объявления

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

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

Одна переменная объявляется один раз. Например:

int i; / / Определение переменной i

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

Синтаксис объявления: тип <список_переменных>. Список переменных содержит одно или более имен идентификаторов, разделенными запятыми.

int i, с, о;

Инициализация переменных может быть проведена при объявлении переменной:

int i=1;

Локальные переменные, объявляются внутри функции, с ними могут работать только операторы, находящиеся в блоке, где данные были объявлены. Вне блока (ограничиваемого фигурными скобками) они неизвестны. Наиболее типичным блоком, в котором они объявляются является функция.

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

Спецификаторы хранения (глобальных переменных)

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

<Спецификатор_хранения> тип <имя_переменной>.

В MikroC есть 4 спецификатора хранения: extern, static, register и auto.


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

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

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

auto Этот спецификатор практически не используется, применяется только для локальных переменных для определения их как локальных.

Объявление ассемблера. MikroC позволяет применять язык ассемблера при написании кода, для чего вводится ключевое слово asm.

asm

{блок инструкций ассемблера}


Функции

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

Объявление функции

Функции объявляются в исходных файлах пользователя или в связанных с ними и доступных библиотеках. Синтаксис декларации функции:

<спецификатор_типа> <имя_функции (список параметров)>

{ тело функции

}

Спецификатор_типа определяет тип возвращаемого функцией значения с помощью оператора return. Это может быть любой допустимый тип. Если тип не указан, предполагается, что функция возвращает целочисленные значения (типа int). Если функция использует аргументы, нужно объявить переменные, получающие значения аргументов. Эти переменные называются формальными параметрами. Поэтому, список параметров это разделенный запятыми список переменных, получающий значение аргументов при вызове функции. Если функция не содержит параметров, то список параметров содержит ключевое слово void.

Тело функции фактически является блоком - последовательностью локальных определений и операторов внутри {}. Все переменные объявленные внутри функции – локальные (область их действия - только внутри функции), то есть у них есть функциональная область. Ниже приведен пример определения функции:

int max (int x, int y)

{ return (x>=y)? x : y; }

Прототипы функции

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

/* прототипы функции test: */

Int test (const char*)

Int test(const char*p)

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