В языке C (и C++) файлы можно открыть с помощью функции fopen(), а закрыть — с помощью функции fclose(). Эти функции, вместе с представлением дескриптора файлов FILE и макросом EOF (конец файла), описаны в заголовочном файле .
FILE *fopen(const char* filename, const char* mode); int fclose(FILE *stream);
По существу, мы используем файлы примерно так: void f(const char* fn, const char* fn2)
{
FILE* fi = fopen(fn, "r"); /* открываем файл fn для чтения */
FILE* fo = fopen(fn2, "w"); /* открываем файл fn для записи */
if (fi == 0) error(,,невозможно открыть файл для ввода"); if (fo == 0) error(,,невозможно открыть файл для вывода");
/* чтение из файла с помощью функций ввода из библиотеки stdio, например, getc() */
/* запись в файл с помощью функций вывода из библиотеки stdio, например, fprintf() */
fclose(fo);
fclose(fi);
}
Учтите: в языке С нет исключений, потому вы не можете узнать, что при обнаружении ошибок файлы были закрыты.
В языке С константы не являются статическими. const int max = 30;
const int x; /* неинициализированная константа: OK в C (ошибка в C++) */
void f(int v)
{
int ai[max]; /* ошибка: граница массива не является константой (OK в языке C++) */
/* (слово max не допускается в константном выражении!) */
int a2[x]; /* ошибка: граница массива не является константой */
switch (v) { case i:
/* . . . */ break;
case max: /* ошибка: метка раздела case не является
константой (OK в языке C++) */
/* . . . */ break;
}
}
По техническим причинам в языке С (но не в языке C++) неявно допускается, чтобы константы появлялись из других модулей компиляции.
/* файл x.c: */
const int x; /* инициализирована в другом месте */
/* файл xx.c: */
const int x = 7; /* настоящее определение */
В языке С++ в разных файлах могут существовать два разных объекта с одним и тем же именем x. Вместо использования ключевого слова const для представления символьных констант программисты на языке С обычно используют макросы. Рассмотрим пример.
#define MAX 30 void f(int v)
{
int ai[MAX]; /* OK */
switch (v) { case i:
27.8. МАКРОСЫ
1065
}
/* . . . */ break; case MAX: /* OK */
/* . . . */ break;
}
Имя макроса MAX заменяется символами 3 0, представляющими собой значение этого макроса; иначе говоря, количество элементов массива ai равно 30, а меткой второго раздела case является число 3 0. По общепринятому соглашению имя макроса MAX состоит только из прописных букв. Это позволяет минимизировать ошибки, вызываемые макросами.
Опубликовал katy
May 01 2015 11:15:06 ·
0 Комментариев ·
3503 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.