Пріоритет І порядок виконання icon

Пріоритет І порядок виконання



НазваниеПріоритет І порядок виконання
Дата конвертации22.09.2012
Размер50.84 Kb.
ТипДокументы

Пріоритет і порядок виконання

Пріоритет і асоціативність операцій мови Сі вплива­яють на порядок групування операндів і обчислення опера­цій у виразі. Пріоритет операцій суттєвий тільки за наявності декількох операцій, що мають різний приори­тет. Вирази з більш пріоритетними операціями обчислюються першими.

В таблиці 1 приведені операції в порядку зменшення пріоритету. Операції, розташовані в одному рядку табли­ці, або з'єднані в одну групу, мають однаковий прі­оритет і однакову асоціативність.

Знак операції

Назва

Асоціативність

() [] . ->

Первинні

Зліва направо

- ~ ! * &

++ -- sizeof

Приведення типу

Унарні

Зправа наліво

* / %

Мультиплікативні

Зліва направо

+ -

Адитивні

Зліва направо

<< >>

Здвиг

Зліва направо

<> <= >=

Відношення

Зліва направо

= = !=

Відношення

Зліва направо

&

Порозрядне і

Зліва направо

~

Порозрядне виключаючи або

Зліва направо

|

Порозрядне включаючи або

Зліва направо

&&

Логічне і

Зліва направо

||

Логічне або

Зліва направо

? :

Умовна

Зправа наліво

= *= /= %= += -= <<= >>= &= |= ^=

Просте і составне присвоювання

Зправа наліво

,

Послідовне обчислення

Зліва направо


З таблиці 1. виходить, що операнди, що представляють виклик функції, індексний вираз, вираз вибору эле­мента і вираз в дужках, мають найбільший пріоритет і асоціативність зліва направо. Приведення типу має той же пріоритет і порядок виконання, що і унарні операції.

Вираз може містити декілька операцій одного пріоритету. Коли декілька операцій одного і того ж рів­ня пріоритету з'являються у виразі, то вони застосовуються відповідно до їх асоціативності—або справа наліво, або зліва направо.

Слід зазначити, що в мові Сі прийнятий невдалий по­рядок пріоритету для деяких операцій, зокрема для операцій зсуву і порозрядних операцій. Вони мають більш низький пріоритет, ніж арифметичні операції (складання і ін.). Тому вираз

а - b & 0xFF + 5

обчислюється як

а = b & (0xFF + 5)

а вираз

а + с > > 1

обчислюється як

(а + с) > > 1

Мультиплікативні, адитивні і порозрядні операції володіють властивістю комутативності. Це значить, що резуль­тат обчислення виразу, що включає декілька комута­тивних операцій одного і того ж пріоритету, не залежить від порядку виконання цих операцій. Тому компілятор залишає за собою право обчислювати такі вирази у будь-якому порядку, навіть у разі, коли у виразі є дужки, що специфікують порядок обчислення.

В СП ТС реалізована операція унарного плюса, яка дозволяє гарантувати порядок обчислення виразів в дужках.

Операція послідовного обчислення, логічні опе­рації І і АБО, умовна операція і операція виклику функ­ції гарантують певний порядок обчислення своїх операндів. Операція послідовного обчислення забезпечує обчислення своїх операндів по черзі, зліва направо (кома, що розділяє аргументи у виклику функції, не є операцією послідовного обчислення і не забезпечує таких гарантій). Гарантується лише те, що до моменту виклику функції всі аргументи вже обчислені.

Умовна операція обчислює спочатку свій перший операнд, а потім, залежно від його значення, або другий, або третій. Логічні операції також забезпечують обчислення сво­їх операндів зліва направо. Проте логічні операції обчислюють мінімальне число операндів, необхідне для визначення результату виразу. Таким чином, другий опе­ранд виразу може взагалі не обчислюватися.

Приклад:

int х, у, z, f();

z = х > у | | f(x, у);

Спочатку обчислюється вираз х>у. Якщо воно істинне, то змінній z привласнюється значення 1, а функція f не викликається. Якщо ж значення х не більше у, то обчислюється вираз f(x,y). Якщо функція f повертає ненульове значення, то змінній z присвоюється 1, інакше 0.

Розглянутий приклад показує основні можливості використання порядку виконання логічних операцій. Це, по-перше, підвищення ефективності за рахунок розміщення най­більш вірогідних умов в якості перших операндів логічних операцій. По-друге, це можливість вставки у вираз перевірок, при помилковості яких подальші дії не проводитимуться. Так, в наступному умовному операто­рі if читання чергового символу з файлу виконуватиметься тільки в тому разі якщо кінець файлу ще не досягнутий:

if((!feof(pf))&& (с = getc(pf)) ...

Тут feof — функція перевірки на кінець файлу, getc — фун­кція читання символу з файлу


^ Побічні ефекти

Побічний ефект виражається в неявній зміні значення змінної в процесі обчислення виразу. Всі операції присвоювання можуть викликати побічний ефект. Виклик функції, в якій змінюється значення якої-небудь зовнішньої змінної, або шляхом явного присвоювання, або через покажчик, також має побічний ефект. Порядок обчислення виразу залежить від реалізації компілятора, за винятком випадків, в яких явно гаран­тується певний порядок обчислень. При обчисленні виразу в мові Сі існують так звані контрольні крапки. По досягненні контрольної крапки всі попередні обчислення, у тому числі всі побічні ефекти, гарантовано проведені. Контрольними крапками є операція послідовного обчислення, умовна операція, логічні операції І і АБО, виклик функції. Інші контрольні крапки:

—кінець повного виразу (тобто виразу, який не є частиною іншого виразу);

—кінець виразу, який ініціалізував вираз для змінної класу пам'яті auto;

—кінець виразів, що управляють виконанням операто­рів if, switch, for, do, while і вирази в операторі return.

Наведемо приклади побічних ефектів:

add(i + 1, i = j + 2);

Аргументи виклику функції add можуть бути обчислені у будь-якому порядку. Вираз i + 1 може бути обчислений перед виразом i = j + 2, або після нього, з різним результатом в кожному випадку. Унарні операції інкремента і декремента також містять в собі присвоювання і можуть бути причиною побічних эф­ектів, як це показано в наступному прикладі:

int i, а[10]; i = 0;

а[i+ + ]= i;

Невідомо, яке значення буде присвоєно елементу а [0]—нуль або одиниця, оскільки для операції присвоюва­ння порядок обчислення аргументів не обумовлюється.




Похожие:

Пріоритет І порядок виконання iconРішення ухвали, постанови, зміна способу виконання, відстрочка або розстрочка їх виконання
Атті 121 гпк має право за заявою сторони, державного виконавця, за поданням прокурора чи його заступника або за власною ініціативою...
Пріоритет І порядок виконання iconДисципліна "Засоби системного програмування" Структура програми написаної мовою програмування сі
Операції мови програмування сі та їх пріоритет. Порядок обчислення виразів. Побічні ефекти. Перетворення та приведення типів
Пріоритет І порядок виконання iconПризначення покарання за кількома вироками. Умовне засудження (суть, підстави, та порядок застосування). Відстрочка виконання вироку (суть, підстави, та порядок застосування)

Пріоритет І порядок виконання iconПоняття і значення принципів кримінального процесу”
Саме в Основному Законі одержали свій прояв такі найважливіші ознаки правової держави, як пріоритет прав та інтересів особи над правами...
Пріоритет І порядок виконання iconВиконання зобов’язання. Забезпечення виконання зобов’язання
Виконання зобов’язання – це здійснення його суб’єктами взаємообумовлених зустрічних дій або утримання від них, які проявляються у...
Пріоритет І порядок виконання iconЗагальновійськова підготовка Білет №1
Порядок віддання та виконання наказів. Розкрити поняття прямий та безпосередній начальник
Пріоритет І порядок виконання iconЗагальновійськова підготовка Білет №1
Порядок віддання та виконання наказів. Розкрити поняття прямий та безпосередній начальник
Пріоритет І порядок виконання iconПорядок виконання розрахункової роботи
Визначте до якого класу шкідливості відноситься підприємство та встановити величину санітарно-захисної зони (таблиця №3)
Пріоритет І порядок виконання iconПлан Вступ І. Поняття І значення договору поставки. Порядок І способи укладення договору поставки. ІІ. Зміст І виконання договору поставки. ІІІ. Відповідальність за неналежне виконання договору поставки. Висновок Література Вступ
Серед зобов'язань, що складають особливу частину зобов'язального права, основне місце належить договірним зобов'язанням. Цивільне...
Пріоритет І порядок виконання iconПоложення про порядок опрацювання, прийняття, перегляду та скасування міжвідомчих нормативних документів системи технічного захисту інформації На виконання постанови Кабінету Міністрів України від

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©rushkolnik.ru 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы