Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроц техника / 4 курс_МТ_МСУД / описание микроСи .doc
Скачиваний:
34
Добавлен:
10.02.2015
Размер:
261.63 Кб
Скачать

Функции

Функции являются основой языка. Функции обычно определены как подпрограммы, возвращающие значения, основанные на ряде входных параметров. Значение, возвращаемое функцией, может быть использована в выражениях - практически, вызов функции является выражением, подобно любому другому. Каждая программа должна назвать единственную внешнюю функцию, называемую 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)

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

function name (expression 1, ... , expression n)

где expression 1… expression n - аргументы функции.

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

int limit = 32;

char ch = 'A' ;

long res;

extern long func(long parl, long par2); // прототип

main ()

{

res = func(limit, ch); // вызов функции

}

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

Операторы

Операторы – символы, сообщающие компилятору о необходимости выполнения каких-либо математических или логических действий.

Есть три больших класса операторов: арифметические, отношения и логические, битовые. Кроме этого существуют специальные операторы: оператор запятая (,),условный оператор (?), оператор массива ([]), оператор вызова функции (()), оператор (Sizeof), операторы препроцессора (#) и (##) и т.д.

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

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

Приоритет

Операторы

Порядок выпонения

15(высший)

() [] . ->

14

! ˜ + -- ++ -* & (тип) sizeof

13

* / %

12

+ - (бинарный)

11

<< >>

10

< <= > >=

9

== !=

8

&

7

ˆ

6

5

&&

4

3

?;

2

= *= /= %= += .= &= »= |= «= » =

1 (низший)

,

-

Арифметические операторы

Арифметические операторы используются для выполнения математических вычислений. Они имеют цифровые операнды и возвращают числовые. Все арифметические операторы выполняются слева направо.

оператор

действие

Бинарные операторы

+

сложение

-

вычитание

*

умножение

/

деление

%

взятие по модулю (остаток) - возвращает разность деления целого (не может быть использован для чисел с плавающей точкой)

Унарные операторы

+

унарный плюс (не влияет на операнд)

-

унарный минус (меняет знак операнда)

++

увеличение (приращение) увеличивает значение на 1, если стоит после оператора – (постфиксный), то добавляет значение после получения программой операнда, если перед операндом(префиксный), то программа производит увеличение до получения операнда. Если

х=10;

y=++x;

y устанавливается в значение 11, а если

x=10;

y=x++;

у устанавливается в значение10.

--

уменьшение (префиксный и постфиксный операторы –см. выше)

Операторы отношения

Применяются для вычисления соотношений между. Если выражение истинно, возвращается 1, в противном случае 0. Все операторы отношения выполняются слева направо.

оператор

действие

==

равно

!=

не равно

>

больше чем

<

меньше чем

>=

больше или равно

<=

меньше или равно

Битовые операторы

Предназначены для тестирования, установки или сдвига битов в байте или слове, которые соответствуют стандартным типам char и int, не могут использоваться с float, double,long и другими сложными типами. Выполняются слева направо, кроме оператора дополнения - выполняется справа налево.

оператор

действие

&

И (AND) - сравнение пары битов, возвращает 1 если оба бита - 1, иначе 0.

I

ИЛИ (OR)возвращает 1 если хотя бы один бит равен 1, иначе 0.

ˆ

Исключающее ИЛИ (XOR) возвращает 1 если соответствующие биты в операндах отличаются, иначе 0.

˜

Дополнение инвертирует каждый бит

«

Сдвиг влево - сдвигает биты влево, уничтожает крайний левый бит и записывает 0 в крайний правый бит.

»

Сдвиг вправо - сдвигает биты вправо, уничтожает крайний правый бит права и в крайний левый бит записывет 0.

Логические операторы

Операнды логических операций считаются истиной или ложью, отличными от нуля или равными нулю. Логические операторы всегда возвращают соотношение между операндами, т.е 1 или 0. Логические операторы && и || выполняются слева направо, кроме оператора отрицания (!) - справа налево.

Оператор

Действие

&&

Логическое И (AND)

||

Логическое ИЛИ (OR)

!

Логическое НЕ

Условный оператор (?)

Условный оператор (?) : - единственный троичный оператор. Синтаксис оператора имеет вид:

<выражение1> ? <выражение2> : <выражение3>

Оператор (?) работает следующим образом: вычисляется выражение1, если оно истинно, то вычисляется выражение2 и все выражение получает это значение. Если оно ложно, то вычисляется выражение3 и все выражение получает это значение, например:

x=10;

y=x>9 ? 100 : 200;

Здесь y получает значение 100, если бы х было меньше, чем 9, то получило бы значение 200.

Оператор присваивания

Простой оператор присваивания (=) применяется для присвоения значения выражения 2 выражению1, в качестве выражения1 может быть переменная, а выражения2 - как одиночная константа, так и комбинация переменных, операторов и констант.

х = 2;

Многочисленное присваивание

Допускается присвоение нескольким переменным одного и того же значения.

x=y=z=0;

Выражения

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

Операторы управления программой

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

метки, выражения, выбора, циклов, перехода и сложные операторы.

Оператор метки

Метка – идентификатор, завершаемый двоеточием:

label_identifier: оператор;

Обычно метка используется с оператором goto

x=1;

loop1: x++;

if (x<100) goto loop1;

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

Пустой оператор (обычно используются в циклах без тела) может состоять из единственной точки с запятой (;).

Если пустой оператор использован вместе с условным оператором, то синтаксис оператора:

for (; *q++ = *p++ ;); //в цикле отсутствует тело.

С помощью пустого оператора можно организовать, например, задержку.

for (t=0; t<100; t++);

Оператор выбора

Используется для проверки условий, определяющих, какое действие нужно проводить. Если выражение оценивается как истинное, выполняется оператор1, если ложное – оператор2.