- •2. Основні елементи мови с
- •3.1 Алфавіт мови програмування
- •3.2Лексеми
- •3.3Ключові слова
- •3.4Ідентифікатори
- •3.5 Класифікація типів даних
- •3.6 Літерали
- •3.7 Оператори
- •3.8 Коментарі
- •3.9 Директиви препроцесора
- •3.10 Організація програми
- •3. Операції та вирази
- •4.1 Загальні відомості
- •4.2 Арифметичні операції
- •4.3 Операції приведення типів
- •(Тип) ідентифікатор,
- •4.4 Операції присвоєння
- •4.5 Операції інкремента і декремента
- •4.6 Операції порівняння
- •4.7 Операції зсуву
- •4.8 Порозрядні операції
- •4.9 Логічні операції
- •4.10 Операція sizeof
- •Sizeof ( Вираз ),
- •4.11 Операція послідовного обчислення
- •4.12 Операція умови (?:)
- •Операнд-1 ? Операнд-2 : Операнд-3
- •4.13 Адресні операції
- •Тип * ім'я_покажчика;
- •4. Прості типи даних
- •5.1 Оголошення змінних
- •[ Модифікатори ] тип ім’я_змінної;
- •5.2 Час існування та область видимості змінних
- •5.3 Цілі типи даних
- •5.4 Дійсні типи даних
- •5. Оператори керування
- •5.1 Оператор розгалуження if
- •If ( Вираз ) true-оператор;
- •5.2 Оператор розгалуження if-else
- •If ( Вираз ) true-оператор; else false-оператор;
- •5.3 Оператор множинного розгалуження switch
- •5.4 Оператор циклу for
- •For ( Вираз 1 ; Вираз 2 ; Вираз 3 ) тіло циклу
- •5.5 Оператор циклу while
- •While ( Вираз ) тіло циклу
- •5.6 Оператор циклу do while
- •Тіло циклу while ( Вираз ) ;
- •5.7 Оператор break
- •5.8 Оператор continue
- •6 Введення та виведення даних
- •7.1 Функція виведення printf
- •Int printf( стрічка форматування, змінна1, змінна2, ... );
- •7.2Функція введення scanf
- •Int scanf (стрічка форматування, адреса змінної1, адреса змінної2, ... );
- •9.1 Введення та виведення у файл
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •Тип даних ім’я змінної [n];
- •7.3 Багатовимірні масиви
- •6. Функції
- •6.1 Основні поняття
- •{Тіло функції}
- •6.2 Область видимості
- •6.3 Порожній тип void
- •6.4 Передача аргументів у функцію
- •6.5 Рекурсивні функції
- •6.6 Прототипи функцій
- •8. Рядки в с
- •4.1 Прототипи
- •4.2 Функції перетворення буферів
- •4.3 Функції перевірки літер
- •4.4 Рядок символів
- •4.5 Операції з рядками:
- •4.6 Символьні константи
- •9. Покажчики
- •5.1 Визначення та ініціалізація покажчиків
- •5.2 Визначення покажчиків:
- •5.3 Масиви
- •5.6 Копіювання рядка
- •5.7 Посилання та оператор &
- •5.9 Посилання в якості результатів функції
- •5.10 Покажчики на функцію
- •Тип_функціі (* імя_покажчика) (специфікація_параметрів);
- •5.11 Покажчики на void
- •5.12 Арифметика покажчиків
- •10. Структури, об’єднання, перерахування
- •7.1 Структури
- •7.2 Ключове слово typedef
- •7.3 Об’єднання
- •7.4Перераховуваний тип (Enum)
- •Enum dataType
- •Enum day
- •11 Динамічне виділення пам'яті
7.4Перераховуваний тип (Enum)
Enum (перерахування) – тип даних що має обмежений список ідентифікаторів.
Кожному значенню відповідає власне ім'я-ідентифікатор і ціле число, значення цього імені.
Синтаксис визначення перерахувань:
enum <ідентифікатор типу>
{
<список перерахування>
};
Тут ідентифікатор типу задає ім'я перераховуваного типу. Список перерахування складається з імен, розділених комами. Кожне ім’я задається ідентифікатором значення і, можливо, цілим значенням типу char чи int.
Приклад **1.Визначення перерахувань.
Enum dataType
{
DT_INT, /* 0 */
DT_CHAR, /* 1 */
DT_STRING=3, /* 3 */
DT_FLOAT, /* 4 */
DT_BYTE=8, /* 8 */
DT_SHORT, /* 9 */
DT_POINTER /* 10 */
};
Коли не вказано значення ідентифікатора, воно буде на одиницю більшим за значення попереднього ідентифікатора. Значення за замовчанням для першого ідентифікатора у списку перерахування нуль.
Для зберігання значень змінних перерахування використовується тип int.
Перерахування зручно використовувати для запобігання появ у коді програми числових літералів, логічне значення яких може бути незрозуміле читачеві. Також перерахування це більш безпечна заміна макровизначенням #define.
Синтаксис оголошення змінної типу перерахування:
enum < ідентифікатор типу перерахування> < ім’я змінної>;
Приклад **2.Використання перерахувань.
#include <stdio.h>
#include <stdlib.h>
Enum day
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
void prn_day(enum day d) /* перерахування як аргумент функції */
{
static char week[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
printf("%s\n",week[d]); /* d приводиться до типу int */
}
int main(void)
{
enum day cnt; /* оголошення змінної типу перерахування */
for(cnt=Sunday;cnt<Saturday;++cnt)
prn_day(cnt);
system("PAUSE");
return 0;
}
Результат роботи програми:
Областю видимості типу перерахування є програмний блок, в якому було визначено перерахування. Область видимості може бут глобальною.
Визначення перерахувань може не містити імені. Доступ до елементів перерахування можливо здійснювати без оголошення змінної типу перерахування.
Приклад **3.Доступ до елементів неіменованого перерахування.
#include <stdio.h>
#include <stdlib.h>
enum
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
void prn_day(int d)
{
static char week[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
printf("%s\n",week[d]);
}
int main(void)
{
int i;
for(i=Sunday;i<Saturday;++i)
prn_day(i);
system("PAUSE");
return 0;
}
Програма приведена у прикладі **3 працює аналогічно програмі з прикладу **2. Відмінність становить метод використання перерахувань. Якщо у прикладі **2 перерахування використовувалось як власний тип даних, що підкреслював логічну структуру програми, то у прикладі **3 перерахування служить тільки для введення іменованих констант. Таке використання перерахувань аналогічне введеню макровизначень за допомогою директиви препроцесора #define.
Приклад **3 показує загальнодоступність ідентифікаторів значень списку перерахування. Це в свою чергу означає що два різних визначення перераховувального типу в одному програмному блоці не можуть мати ідентифікаторів значень з однаковими іменами, навіть якщо їм присвоєно однакові значення.