Медицина

Основні синтаксичні конструкції C

Основні синтаксичні конструкції C (Java)

Зовсім не применшуючи усіх можливостей та переваг синтаксису Pascal слід визнати, що на сьогоднійшній день більшість програм розробляється дотримуючись інших “граматичних правил” - синтаксису C (читається “Сі”). Даний синтаксис з”явився в однойменній мові програмування C і тепер активно використовується в специфікаціях сучасних мов програмування - C++, Java. Особливий інтерес викликає остання, завдяки безпосередній інтегровності у протоколи Internet, про що піде мова далі.

Мова С багато перейняла у свого попередника - BCPL.  С була розроблена в США співробітниками фірми Bell Laboratories на межі 70-х років. Приблизно в той же час вона була використана для розробки операційної системи UNIX. Питання підвищення здатності перенесення відігравали велике значення з самого початку розробки як мови С, так і операційної системи UNIX, тому їх розповсюдження на нові комп”ютери відбувалося дуже швидко.

Перший опис мови С був даний її авторами, Б. Керніганом та Д. Рітчі (є російський переклад - [1]).  Досить показовим фактом про оригінальну вдачу авторів є назва мови С (за однією з версій - просто третя буква англійського алфавіту). На жаль, опис не був строгим і повним і містив ряд моментів, що допускали неоднозначне тлумачення. Це призвело до того, що різні розробники систем програмування у своїх реалізаціях мови С дотримувались різних діалектів. Протягом тривалого часу фактичним стандартом мови С була її реалізація у сьомій версії операційної системи UNIX, яка практично і була визнана Американським Національним Інститутом Стандартів (ANSI) в 1989 р.

Наступним нащадком С стала мова програмування С++. Ранні версії цієї мови використовувалися з 1980 р. під узагальненою назвою “С з класами”. Перший імпульс створення С++ виник тому, що автор хотів написати деякі дії (емуляції), які б керувалися подіями, для чого б ефективно підійшла Simula-67, якби не міркування ефективності. Тому в мові С++ було повністю перейнято синтаксис С а також реалізовано такі важливі поняття із Simula-67, як клас, похідний клас, віртуальна функція, перейнято деякі “вільності” програмування з Algol-68. Вперше за межами дослідницької групи С++ було використано у червні 1983 р.

Назву С++   придумав Рік Маскітті. Ця назва відображає еволюційний характер змін мови С. “++” - це оператор інкрементації в мові С. Більш коротка назва - С+ - це синтаксична помилка. Знавці семантики С вважають, що С++ гірша назва, ніж ++С. Мова не називається D, тому, що вона - розширення С, і в ній не робляться спроби розв”язувати проблеми шляхом виключення будь-яких засобів С.

90-ті роки ХХ століття були ознаменовані появою WWW. Прагнучи розробити універсальний засіб для надання Web-сторінкам можливості інтерактивності фірмою Sun було створено специфікації мови Internet-програм, яка отримала назву Java. За однією з версій назва Java походить від сорту популярної кави, яку так смакували автори мови. Тому на пікторамах вікон виконання програм Java часто можна зустріти горнятко паруючої кави.

Завдяки своїй популярності і можливо вдалості синтаксис мови С у своїй основі залишився у Java. Хоча розробники Java вирішили відмовитися від сумісності із С заради простоти мови. Для порівняння, розробники С++ добивалися сумісності із мовою С, розробленою майже 30 років назад. Як результат, мова С++ вийшла винятково складною.

Наступний огляд слугуватиме екскурсією у синтаксис С в своїй реалізації у Java. Її мета - не стільки дати повний і точний виклад мови, як вказати на особливості синтаксичних конструкцій, на які опирається більшість програмного забезпечення сьогодення і сподіватимемося - майбуття.

 

Вирази

Оператором Java може бути коментар, блок, опис, вираз або оператор керування. Більшість операторів в Java закінчуються символом ; (крапка з комою). Лише блоки та коментарі не підлягають цьому правилу.

 

Коментарі

В Java означено три типи коментарів. Найрозповсюджені коментарі - дві косі риски (//) в рядку. Все, що розміщується між // і кінцем рядка, вважається коментарем.

Другий тип коментаря починається із символів /*, а закінчується символями */. Символ закінчення рядка в цьому випадку ігнорується.

Третій тип коментаря - починається /** і закінчується */ - використовується спеціальними утилітами для документування програми.

 

Блоки

Переважно програма розбивається на логічні блоки, код яких обмежується фігурними дужками {  та  }.

 

Оголошення змінних

Усі локальні змінні повинні бути оголошені до першого їх використання у програмі. Локальна змінна - це змінна, оголошена всередині функції; область її видимості обмежена цією функцією. Такі описи можуть міститися в довільному місті всередині функції. При оголошенні змінної вказується її тип, ім”я змінної; може також бути знак рівності (=) і вираз, що задає початкове значення змінної.

 

Int nAnInt;      //оголошення змінної

int nASecondInt = 10;  //оголошення іншої змінної і присвоєння їй початкового значення

 

Вмонтовані типи даних

У таблиці наведено вмонтовані типи Java. Кожна змінна при оголошенні отримує деяке значення за припущенням.

Таблиця. Вмонтовані в Java типи даних

Тип даних

Розмір, розр.

Значення за припущенням

boolean

8

false

byte

8

0

char

16

‘x0’

short

16

0

int

32

0

long

64

0

float

32

0.0F

double

64

0.0D

 

Імена змінних. Ідентифікатори

Ім”я змінної може бути довільним дозволеним в Java ідентифікатором. Ідентифікатор може починатися з букви, символу підкреслення (_) або знаку долара ($). Решта чатина ідентифікатора може містити, крім цього і цифри.

 

Константи

Звичайні константи цілого типу - 32-розрядні десяткові числа із знаком. З нуля починаються восьмирічні константи, а з 0х або 0Х - шістнадцятирічні. Символи від А до F в шістнадцятирічних числах можут бути як великими так і малими.Константи типу long можуть закінчуватися символами l або L, double - d або D, float - f або F.

 

Логічні операції

Логічні оператори &, | і  ^ можна застосовувати до аргументів типу boolean для виконання логічних операцій AND, OR і XOR відповідно. Зверніть увагу, що лівий і правий аргументи операторів & і |  обчислюються навіть тоді, коли в цьому немає потреби. Два спеціальних оператори - && i || - виконують ті самі операцій AND i OR, але в короткому варіанті (тобто, якщо на основі значення першого аргументу немає сенсу обчислювати значення другого аргументу, то воно не обчислюється).

 

Спеціальні оператори

Незвичними для цілочисельних змінних є оператори інкрементації (++) та декрементації (- -), обидва з яких можуть приймати префіксну  ++nA та постфіксну nA++  форми. Відмінності у результатах їх виконання можна прослідкувати з прикладу:

 

int nA;

int nB;

int nC;

nA = 1;

nB = ++nA; // префіксна операція - після неї nB і nA дорівнюють 2

nA = 1;

nC = nA++; // постфіксна операція - після неї nC дорівнює 1, nA дорівнює 2

 

Дивними є оператори, що поєднують бінарну операцію та присвоєння. Якщо op - бінарна операція, то можливий такий вираз:

 

a op= b;  // це еквівалентно до виразу a = a op b

 

Цей запис застосовний до всіх бінарних операцій. Та найцікавішим є так званий тернарний оператор (тернарний означає - потрійний і вказує, що оператор має три аргументи):

 

(boolexpr) ? expr1 : expr2;

 

Спочатку обчислюється логічне значення boolexpr. Якщо воно дорівнює true, то значенням оператору буде значення expr1, в противному разі - expr2.

 

Оператори керування

Оператор розгалуження if:

 

if (boolexpr)

{

              // довільне число операторів або виразів

}

else

{

             // довільне число операторів або виразів

}

 

Частина з else, звісно, необов”язкова.

Оператор циклу while

Є два види циклу while:

 

while (boolexpr)

{

           // довільне число операторів або виразів

}

 

і

 

do

{

          // довільне число операторів або виразів

}

while (boolexpr);

 

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

Ключове слово continue відразу передає керування на дужку, що закривається, викликаючи початок наступної ітерації циклу.

Оператор циклу for:

 

for (expr1; boolexpr2; expr3)

{

            // довільне число операторів або виразів

}

 

Тут expr1 - вираз, що використовується для ініціалізації індексної змінної, boolexpr2 - умова виконання циклу, expr3 - вираз для зміни індексної змінної.

Оператор вибору switch використовується для вибору з кількох варіантів:

 

switch (expr)

{

             case cexpr1:

                             // довільне число операторів або виразів

                             break;

             case cexpr2:

                            // довільне число операторів або виразів

             default:

                            // оператори, що виконуються за припущенням

}

 

Спочатку обчислюється значення виразу expr. Далі його значення порівнюється із константними виразами після ключових слів case. При співпаданні виконуються відповідні командні блоки.

 

1.       Керниган Б., Ритчи Д., Фьюэр А. Язык программирования Си. Задачи по языку Си: Пер.с англ - М.: Финансы и статистика, 1985.