Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Прототипы стандартных библиотечных функций

Любая стандартная библиотечная функция, используемая в программе, должна иметь прототип. С этой целью следует включать соответствующие заголовочные файлы для каждой библиотечной функции. Заголовочные файлы используют расширение Н и поставляются вместе с Borland С++. Заголовочный файл содержит два главных элемента: любые объявления, используемые функциями, и прототипы функций. Например, stdio.h включается в большинство программ, поскольку он содержит прототип для printf(). Если для каждой библиотечной функции, используемой программой, включить соответственный заголовочный файл, то вполне вероятно, что компилятор отловит все случайные ошибки, которые можно было сделать. (При написании программ на С++ все функции должны иметь прототипы.)

Создание прототипов функций, не имеющих параметров

Как известно, прототипы функции сообщают компилятору о типе возвращаемого функцией значения, а также о числе и типе используемых функцией параметров. Поскольку прототипы не являются частью исходной версии С, возникает особый случай, если необходимо создать прототип функции, не принимающей параметров. Это обусловлено тем, что если в прототип функции не включаются параметры, то не определяется информация о типе или числе параметров функции. Необходимо гарантировать, что старые программы могут компилироваться современными компиляторами типа Borland С++. Когда необходимо сообщить компилятору, что функция не получает параметров, следует использовать ключевое слово void внутри списка параметров. Рассмотрим следующую короткую программу: #include <stdio.h> void display10(void); int main(void) { display10(); return 0; void display10(void) { int i; for(i=0; i<10; i++) printf("%d ", i); } В данной программе прототип функции display10() говорит компилятору, что функция display10() не получает аргументов. Поскольку список параметров функции должен соответствовать ее прототипу, то void должен содержаться при объявлении display10() так же, как и при последующем определении в программе. Предполагая наличие предшествующего прототипа, Borland С++ не будет компилировать вызов display10() типа display10(100);

Тем не менее, если void отсутствует в списке параметров, не будет выдана ошибка и аргумент будет просто проигнорирован.

ЗАМЕТКА: В С++ f() u f(void) полностью эквивалентны и не имеют никакого отношения к только что приведенной дискуссии.

Возврат указателей

Хотя функции, возвращающие указатели, обрабатываются точно так же, как и функции с другим типом, следует рассмотреть несколько важных понятий.

Указатели на переменные - это не целые числа и не беззнаковые целые. Это адрес памяти некоторого типа данных. Причина такого разделения состоит в том, что когда выполняются арифметические действия с указателем, изменения происходят с учетом базового типа, то есть, если указатель на целое увеличивается, он будет содержать значение на 2 больше по сравнению с предыдущим (предполагается использование 2-байтных целых). Каждый раз при увеличении указателя он указывает на следующий элемент базового типа. Поскольку каждый тип данных может иметь различную длину, компилятор должен знать, на какой тип данных указывает указатель, чтобы правильно осуществить переход к следующему элементу данных.

Ниже показана функция, возвращающая указатель на строку в месте, где найдено соответствие символов: char *match(char с, char *s) { register int count; count = 0; while(c!=s[count] && s[count]) count++; return(&s[count]); } Функция match() пытается вернуть указатель на позицию в строке, где первый раз найден символ с. Если не найдено соответствие, возвращается указатель, содержащий NULL. Ниже показана небольшая программа, использующая match(): #include <stdio.h> #include <conio.h> char *match(char c*, char *s); int main(void) { char s[80], *p, ch; gets (s) ; ch = getche(); p = match(ch, s); if (p) /* совпадение */ printf("%s ", p); else printf("No match found."); return 0; } Данная программа осуществляет чтение строки, а затем символа. Если символ содержится в строке, то выводится строка, начиная с момента совпадения. Иначе выводится «No match found».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]