програму, що запускається і видає на екран меню з двох пунктів
// file1.c:
static int a=6;
static int f () {/*...*/}
// file2.c:
static int a=7;
static int f () {/*...*/}
Оскільки кожне a і f описане як static, в результаті програма ,що одержується є правильною. В кожному файлі своя a і своя f (). Коли змінні і функції явно описані як static, частину програми легше зрозуміти (вам не треба никуда більше заглядать). Використання static для функцій може, окрім цього, вигідно впливати на витрати за викликом функції, оскільки дасть оптимізуючому компілятору більш просту роботу. Розглянемо два файлу:
// file1.c:
const int a=6;
inline int f () { /*...*/ }
struct s {int a, b;}
// file1.c:
const int a=7;
inline int f () { /*...*/ }
struct s {int a, b;}
Раз правило 'рівно одне визначення' застосовується до констант, inline- функцій і визначення функцій так же, як воно застосовується до функцій і змінних, то file1.c і file2.c не можуть бути частинами однієї C++ - програми. Але якщо це так, то як же два файли можуть використати одні і ті же типи і константи? Коротко, відповідь така: типи, константи і т. д. можуть визначатися стільки раз, скільки потрібно, за умови, що вони визначаються однаково. Повна відповідь декілька більш складна.
Інструкція користувачу
Програма запускається і видає на екран меню з трьох пунктів (формування файлу, запит, вихід).На вибір першої опції меню формується на одному з дискових пристроїв двійковий файл SESSIA.DAT, що містить зведення про здачу студентами сесії. Структура запису: індекс групи (7 символів), Ф.И.О. студента (15 символів), оцінки по чотирьох іспитах ( чи символи цифри в діапазоні 2 5) і п'яти залікам (“s”– зараховано, “n”– не зараховано). Організовується заповнення файлу вмістом у режимі діалогу з користувачем (уведення закінчується набором індексу групи, що складається з 7 пробілів). Якщо файл із таким ім'ям існує, його коректування не робиться.
На вибір другої опції меню надається можливість користувачу:
по введенню прізвища студента одержати результати сесії;