Void func (int n, float f, char ch);
Точка с запятой «;» - терминатор утверждения. Любое правильное выражение (включая пустое выражение) сопровождающееся точкой с запятой интерпретируется как законченное утверждение.
a + b;
++a; x = 0;
; //пустое или нулевое утверждение
Двоеточие «:» используется для выделения утверждения:
start: x = 0;
…
goto start;
Указатель «*» возвращает значение переменной по указанному адресу. например, если m содержит адрес переменной count, то х=m*; помещает значение count в х.
Знак Равенства «=» – используется для операции присваивания:
int x = 5;
int test[5]={1,2,3,4,5};
Знак (#) (директива препроцессора). Директивы препроцессора, не являясь частью языка, расширяют область его применения. Обработка программы препроцессором проходит перед ее компиляцией. На этом этапе: в компилируемый файл включаются другие файлы, определяются символьные константы и макросы, задаются режимы условной компиляции программного кода и условного выполнения директив препроцессора. Любая строка, начинающаяся с # воспринимается как директива препроцессора, а в конце директивы (;) не ставится.
Типы данных
МikroC – очень формализованный язык, это означает что каждый объект, функция и выражение должны иметь строго определенный тип, который может быть распознан компилятором. Причем, mikroC работает исключительно с числовыми типами.
МikroC поддерживает много стандартных (встроенных) и определяемых пользователем типов данных, включая беззнаковые целые числа, числа с плавающей запятой разной точности, массивы структуры и объединения.
Все типы можно разбить на 4 основных группы
Aggregate (структуры данных) |
Array |
Массивы |
struct |
Структуры | |
union |
Объединения | |
class |
Классы | |
Function |
|
Функции |
Scalar (скалярные) |
Arithmetic |
Арифметические |
Enumeration |
Перечислимые | |
Pointer |
Указатели | |
Reference |
Ссылки | |
void |
|
Нет значения |
Синтаксис объявления типа:
Определение_типа идентификатор;
Идентификатор – вводимое пользователем имя нового типа, определение_типа – описание этого типа.
Например,
double Ar[10];//объявление типа с именем Ar,
в дальнейшем на этот тип можно ссылаться при объявлении переменных, например,
Ar A={1,2,3,4,5,6,7,8,9,10};
Арифметические типы
Арифметические описатели типа построены из следующих ключевых слов: void, char, int, float, double со следующими модификаторами: short, long, signed and unsigned. Используя эти ключевые слова можно сформировать как целое число так и число с плавающей запятой.
Целочисленные типы
Типы char, int вместе с их модификаторами образуют следующие типы данных.
Тип |
Размер в байтах |
диапазон |
(unsigned) char |
1 |
0.. 255 |
signed char |
1 |
-128.. 127 |
(signed) short (int) |
1 |
-128.. 127 |
unsigned short (int) |
1 |
0 .. 255 |
(signed) int |
2 |
-32768 .. 32767 |
unsigned (int) |
2 |
0.. 65535 |
(siqned) lonq (int) |
4 |
-2147483648 .. 2147483647 |
unsigned lonq |
4 |
0 .. 4294967295 |
Ключевые слова (стоят в скобках) могут быть опущены.
Числа с плавающей запятой находятся в диапазоне:
float (‑1,5*1045…3,4*1038) – 4 байта,
double (1,5*1045…3,4*1038) - 4 байта,
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];