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 зовнішні об'єкти


Змінні, що використовуються в програмі, можуть бути не тільки глобальними, локальними або статичними, але також можуть представляти зовнішні об'єкти. Такі об'єкти визначені в якомусь зовнішньому файлі. Крім того, функції також можуть бути зовнішніми по відношенню до інших функцій, тобто також можуть бути визначені в інших файлах. І в цьому випадку постає питання організації взаємодії між ними. Розглянемо приклад такої взаємодії.

Нехай у нас в програмі буде два файли: головний файл app.c і допоміжний файл main.c .

Файл app.c буде містити наступний код:

#include <stdio.h>
 
extern int y;       // змінна з файла main.c

void func2(void);   // функція func2 з main.c
void func3(void);   // функція func3 з main.c
 
int x = 10;
 
int main(void)
{
    func3();
    return 0;
}
 
void func1()
{
    printf("func1: x=%d \t y=%d \n", x, y);
    func2();
}

І вміст файлу main.c :

#include <stdio.h>
 
extern int x;       // змінна з файла app.c

void func1(void);   // функція func1 з app.c
 
int y = 20;
 
void func2()
{
    printf("func2: y=%d \n", y);
}
int z = 30;
 
void func3()
{
    func1();
    printf("func3: x=%d \t y=%d \t z=%d \n", x, y, z);
}

Обидва файли використовують функції і змінні один одного. Якщо змінна визначена в зовнішньому файлі, то перед її використанням повинен йти її опис з ключовим словом extern . Зокрема, в файлі app.c визначена змінна x . Але щоб її використовувати у файлі main.c , нам треба в цьому файлі помістити її опис:

extern int x;

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

Якщо ми хочемо використовувати зовнішні функції, то перед їх використанням треба визначити їх прототип. Так, у файлі app.c визначена функція func1 , тому в файлі main.c перед викликом цієї функції поміщається її прототип:

void func1(void);

Те ж саме стосується використання змінних і функцій з файлу main.c в файлі app.c .

При компіляції в Visual Studio нічого додатково не треба робити - середовище розробки автоматично скомпілює обидва файли в одну програму.

При компіляції через GCC компілятору треба послідовно через пропуск передати імена файлів:

app main.c

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