Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Специфікатори глобальних зміннихСодержание книги
Поиск на нашем сайте
В оголошеннях глобальних змінних можна використовувати тільки специфікатори static i extern. Ці специфікатори найчастіше застосовують при створенні багато файлових програм. Кожна глобальна змінна має бути визначена (тобто описана) тільки один раз, в разі багато файлових програм – в одному з файлів. Опис змінної пов’язаний з виділенням для неї оперативної пам'яті, обсяг якої визначається типом цієї змінної. Для глобальної змінної пам’ять виділяється в сегменті даних програми і заповнюється нулями, якщо в описі змінну не ініціалізують іншим значенням. В описах змінних зовнішнього рівня або взагалі не використовують специфікаторів, або вказують специфікатор static – в цьому випадку це означає, що областю дії даної змінної буде частина програми від опису змінної до кінця файлу. В інших файлах програми ця змінна недоступна, тому усувається загроза випадкової зміни її значення. Крім того, в інших файлах можна використовувати свої глобальні змінні з тим самим іменем, оскільки всі однойменні змінні з специфікатором static незалежні. Кожен програмний файл багато файлової програми може компілюватись автономно. Тому, щоб забезпечити можливість звертання до глобальних змінних, описаних в інших файлах, треба в даному файлі оголосити потрібні глобальні змінні ще раз з використанням специфікатора extern. Таке оголошення не пов’язане з виділенням пам'яті для змінних, отже змінні з специфікатором extern не можна ініціалізувати – вони є посиланнями на відповідні зовнішні змінні та роблять ці змінні видимими (оголошеними) в межах поточного файлу. Таким чином, кожен об’єкт програми повинен бути описаний тільки один раз, але може бути оголошений багаторазово. Найчастіше це стосується прототипів функцій і змінних з специфікатором extern. Для більшості змінних програми описи та оголошення збігаються. Багатофайлові програми В невеликих за розміром програмах функцію main і всі інші функції доцільно записувати в одному текстовому файлі. Якщо програма велика і складна, то доцільно поділити її на декілька програмних файлів, код кожного з яких можна створювати і компілювати автономно. У багато файлових програмах питання видимості постають у межах одного файлу та на меж файловому рівні. Встановлено такі правила: 1) об’єкти, оголошені на зовнішньому рівні (тобто між функціями), є частково глобальними, область їх дії – від точки оголошення до кінця програмного файлу; 2) щоб звернутись до глобальної змінної, описаної в іншому файлі, необхідно в поточному файлі оголосити цю змінну з специфікатором extern; 3) функції є глобальними об’єктами, тобто вони описуються тільки один раз, областю їх дії є вся програма; 4) прототипи функцій є частково видимими, вони діють в межах одного програмного файлу. Згідно з третім правилом кожна функція повинна бути описана тільки один раз в програмі у якомусь з файлів. Для звертання до функції з інших файлів або перед її описом у тому ж файлі треба попередньо вказати прототип функції. Областю дії прототипу функції є один програмний файл, тому в кожному файлі програми треба окремо оголошувати прототипи всіх необхідних функцій. Зазвичай створюють заголовний файл, в якому записують декларації шаблонів структурних типів і прототипи функцій і файл з розширенням срр, в якому функції описані повністю. Наприклад:
#include <iostream> #include "fibonachi.h" using namespace std; int main() { cout << fib(46); } // fibonachi.h #ifndef FIBONACHI #define FIBONACHI long fib(long n); #endif // fibonachi.cpp #include "fibonachi.h" static long knownf[ 47 ]; void init_fibo(void) { knownf[ 0 ]=0; knownf[ 1 ]=1; for(int i = 2; i < 47; i++) knownf[ i ] = -1; } long fib(long n) { static int num; if (++num == 1) init_fibo(); if (knownf[ n ]!= -1) return knownf[ n ]; else { knownf[ n ] = fib(n - 1) + fib(n - 2); return knownf[ n ]; } } Робота з файлами Звертання до файлів Для роботи з файлами необхідно підключити бібліотеку fstream. Файл, як і будь-яку іншу змінну, необхідно оголосити. Це можна зробити таким чином:
ofstream fn ("test.txt", ios::app);
Тут fn – змінна, за допомогою якої будуть виконуватись звертання до файлу з програми, test.txt – ім’я файлу на диску, ios::app – режим звертання до файлу. Існують такі режими звертання до файлу: ios::in – читання з файлу, для потоку ifstream встановлюється за замовчуванням, курсор встановлюється в початок файлу за замовчуванням; ios::out – запис поверх існуючої, для потоку ofstream встановлюється за замовчуванням, курсор встановлюється в початок файлу за замовчуванням; ios::ate – запис і зчитування, запис поверх існуючої, курсор встановлюється в початок файлу за замовчуванням; ios::app – запис, додавання в кінець файлу після існуючого запису. Таким чином, команда з останнього приклада буде відкривати файл з іменем test.txt, який знаходиться в тому самому каталозі, що і програма. Файл відкривається для запису, якщо файл не існує – він буде створений. Для того, щоб відкрити файл як для зчитування, так і для запису, необхідно виконати таку команду:
ifstream fn ("test.txt", ios::in | ios::out);
Тут два аргумента ios::in і ios::out об’єднані за допомогою оператора |. Результат виконання цієї операції можна перевірити таким чином:
if (!fn) { cout << "Error opening file\n"; exit(1); }
В результаті виконання функції exit програма завершається. Аргумент цілого типу може приймати будь-яке значення, але традиційно вважають, що значенню аргументу 1 відповідає завершення програми через помилку, значенню аргумента 0 – нормальне завершення програми. Після використання файлу його необхідно закрити:
fn.close();
|
||||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 88; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.15 (0.007 с.) |