C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C #define директива


Директива #define визначає ідентифікатор і послідовність символів, які будуть підставлятися замість ідентифікатора кожен раз, коли він зустрінеться в вихідному файлі. Формальне визначення директиви:

#define ідентифікатор послідовність_символів

Використовуємо директиву #define :

#define BEGIN {
#define END }
#define N 23
 
int main(void)
BEGIN
    int x = N;
    return 0;
END

Тут визначені три ідентифікатора BEGIN , END , N . Як правило, ідентифікатори мають імена в верхньому регістрі, хоча це необов'язково, можна визначати імена і малими символами.

У підсумку всі входження послідовності символів " BEGIN " будуть замінюватися на відкриваючу фігурну дужку, а " END " - на закриваючу, а символ " N " на число 23 .

Таким чином, після обробки препроцесора програма набуде такого вигляду:

int main(void)
{
    int x = 23;
    return 0;
}

Для ідентифікатора необов'язково визначати послідовність символів, можна обмежитися одним ідентифікатором:

#define DEBUG

Особливо зручно використовувати директиву #define для визначення розмірів масивів:

#include <stdio.h>
 
#define N 4
 
int main(void)
{
    int numbers[N] = {1, 2, 3, 4};   // N = 4

    for(int i=0; i<N; i++)           // N = 4
    {
        printf("%d ", numbers[i]);
    }
    return 0;
}

// RESULT:
// 1 2 3 4

В даному випадку якщо ми захочемо глобально поміняти розмір масиву, то досить змінити значення N в директиві define .

Слід враховувати, що директива препроцесора не замінює послідовності символів в подвійних і одинарних лапках і в коментарях:

#include <stdio.h>
 
#define N 4
 
int main(void)
{
    char symbol = 'N';
    printf("%c \n", symbol);    // N
    printf("N");                // N
    return 0;
}

// RESULT:
// N
// N

Причому якщо ідентифікатор повинен представляти одне слово, то його послідовність символів може складатися з декількох слів або символів, розділених пробілами:

#define REAL long double

#undef директива

У процесі роботи ми можемо багаторазово визначати нове значення для одного ідентифікатора:

#define N 23
#define N 32
#define N 55

Але деякі компілятори, зокрема, gcc, можуть видавати попередження при повторному визначенні ідентифікатора, і щоб вийти з цієї ситуації, ми можемо використовувати директиву #undef для скасування дії макросу. Ця директива має наступне визначення:

#undef ідентифікатор

наприклад:

#include <stdio.h>
 
#define STRING "Good morning \n"
 
int main(void)
{
    printf(STRING);
    #undef STRING
    #define STRING "Good afternoon \n"
    printf(STRING);
    #undef STRING
    #define STRING "Good evening \n"
    printf(STRING);
    return 0;
}

Наш партнер:
beta test mp3 playlist downloader