Зворотний зв'язок

програму, що запускається і видає на екран меню з двох пунктів

// file1.c:

int a=1;

int f () { /*щось робить*/ }

// file2.c:

extern int a;

int f (); void g () {a=f ();}

a і f (), що використаються g () в файлі file2.c, - ті же, що визначені в файлі file1. c. Ключове слово extern (зовнішній) вказує, що опис a в file2.c є (тільки) описом, а не визначенням. Якщо б a ініціалізувалась, extern був б просто проігноровано, оскільки опис з ініціалізацією завжди є визначенням. Об'єкт в програмі повинен визначатися тільки один раз. Описуватися він може багато раз, але типи повинні точно погоджуватися. Наприклад:

// file1.c:

int a=1;

int b=1;

extern int c;

// file2.c:

іnt a;

extern double b;

extern int c;

Тут три помилки: a визначене двічі (int a; є визначенням, що означає int a=0;), b описане двічі з різними типами, а c описане двічі, але не визначене. Ці види помилок (помилки компоновки) не можуть бути виявлені компілятором, що за один раз бачить тільки один файл. Компоновщик, однак, їх виявляє. Наступна програма не є C++ - програмою (хоча CІ програмою є):

// file1.c:

int a;

int f () {return a;}

// file2.c:

int a;

int g () {return f ();}

По-перше, file2. c не C++, тому що f () не була описана, і тому компілятор буде незадоволений. По-друге, (коли file2.c фіксований) програма не буде скомпонована, оскільки a визначене двічі. Ім'я можна зробити локальним в файлі, описавши його static. Наприклад:


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат