Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 1.17 Складені оголошення - Програмування С, С++теорія та практика (частина 1) - Studbook

Програмування С, С++теорія та практика (частина 1)

1.17 Складені оголошення

Прості оголошення в мові Сі дозволяють визначати прості змінні, масиви, покажчики, функції, структури та об’єднання.

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

Для оголошення масиву значень деякого типу, функції, що повертає значення деякого типу, або покажчика на значення деякого типу, ідентифікатор доповнюється відповідно квадратними дужками [...] справа, круглими дужками (... ) справа або ознакою покажчика - зірочкою (*) зліва.

Наступні приклади ілюструють найпростіші форми оголошень :

іп- 1із-[20];   /*  масив 1із- із 20 цілих значень */

сЬаг *ср;       /*  покажчик ср на значення типу сЬаг */

йоиЬ1е £ипс(); /* функція £ипс(), що повертає значення типу йоиЬ1е*/

Синтаксис оголошення :

[ кпас_пам'яті ] тип ідентифікатор [ = ініціалізатор ] ;

Оголошення складаються з чотирьох частин :

1.         необов’язкового специфікатора класу пам’яті (аиіо, тедізіег, і'іаііс, ехіегп);

2.        базового типу або типу користувача;

3.       оголошуючої частини;

4.        необов’язкового ініціалізатора.

Оголошуюча частина в свою чергу складається з ідентифікатора і, можливо, операторів оголошення. Найчастіше використовуються наступні оператори оголошення (таблиця 1.18).

Таблиця 1.18. „Оператори оголошення”

*

покажчик

префікс

*СОП5Ї

константний покажчик

префікс

&

посилання (адреса)

префікс

[ ]

масив

суфікс

( )

функція

суфікс

 

Суфіксні оператори оголошення „міцніше зв’язані” з ім’ям, ніж префіксні. Тому ґурепате             означає                масив покажчиків на деякі

об’єкти, а для визначення типів таких як „покажчик на функцію” необхідно використовувати дужки.

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

З одним ідентифікатором можна створити множину різних комбінацій ознак типу масив, покажчик або функція. Причому, деякі комбінації неприпустимі. Наприклад, масив не може містити в якості елементів функцію, а функція не може повертати масив або функцію.

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

Круглі дужки можуть також використовуватися для зміни існуючого по замовчуванню порядку інтерпретації оголошення. Наприклад :

іп£ *£ипс();   /*функція, що повертає покажчик на іп£ */

іп£ (*£ипс)();/*покажчик на функцію, що повертає іп£ */

Алгоритм інтерпретації складених оголошень :

1.    Знайти ідентифікатор (якщо їх декілька, то необхідно почати з того, який знаходить ближче до „середини” складеного оголошення).

2.    Подивитися вправо :

•      Якщо справа розташована відкриваюча кругла дужка - тоді це функція, а вираз, що розташований між цією відкриваючою дужкою ‘(’ і відповідною їй закриваючою дужкою ‘)’ необхідно інтерпретувати як параметри функції.

•      Якщо справа стоїть відкриваюча квадратна дужка ‘[’ - тоді це масив і вираз між відповідними квадратними дужками [...] необхідно інтерпретувати як розмір масиву. Примітка : якщо масив багатовимірний, то за дужками [... ] розташовується ще одна або декілька серій квадратних дужок [. ].

•      Якщо на будь-якому етапі інтерпретації справа зустрічається закриваюча кругла дужка ‘)’, то необхідно спочатку повністю

провести інтерпретацію всередині даної пари круглих дужок, а потім подовжити інтерпретацію справа від закриваючої круглої дужки ‘)’.

3.     Якщо зліва від проінтерпретованого виразу розташована зірочка і :

•       проінтерпретований вираз є функцією, то вона повертає покажчик;

•       проінтерпретований вираз є масивом, то кожний елемент цього масиву є покажчиком;

•       проінтерпретований вираз не є ні функцію, ні масивом, то вираз є покажчиком.

4.     Застосувати описані вище правила (2-3 пункт алгоритму) ще раз.

5.     Проінтерпретувати специфікацію типу даних.

Приклад інтерпретації складених оголошень :

сИаг *(*(*уаг)(сИаг агг[100]))[1 00];

і ті'—і—1       і

7 6 4 2 1                        3                     5

Рис. 1.22. Порядок інтерпретації складного оголошення

1.       Ідентифікатор уаг оголошений як

2.     покажчик на

3.                   функцію, що приймає в якості аргументу масив із ста значень типу сЬаг і повертає

4.     покажчик на

5.       масив із ста елементів, кожний з яких є

6.       покажчиком на

7.       значення типу скаг.

 

82