Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 24 25 26 [ 27 ] 28 29 30 ... 210


где-нибудь в другом месте в том же самом исходном файле с спецификатором класса памяти static. Спецификатор класса памяти static может быть также использован, когда определяемая функция предварительно объявлена в том же самом исходном файле без спецификатора класса памяти. Как правило, функция, объявленная без спецификатора класса памяти, подразумевает класс extern. Однако, если определение функции явно специфицирует класс static, то функции дается класс static.

Тип возврата

Тип возврата функции определяет размер и тип возвращаемого значения. Объявление типа имеет следующий синтаксис:

[<type-specifier>] <declarator> где спецификатор типа <type-specifier> вместе с декларатором <declarator> определяет тип возврата и имя функции. Если <type-specifier> не задан, то подразумевается, что тип возврата int. Спецификатор типа может специфицировать основной, структурный и совмещающий типы. Декларатор состоит из идентификатора функции, возможно модифицированного с целью объявления адресного типа. Функции не могут возвращать массивов или функций, но они могут возвращать указатели на любой тип, включая массивы и функции. Тип возврата, задаваемый в определении функции, должен соответствовать типам возвратов, заданных в объявлениях этой функции, сделанных где-то в программе. Функции с типом возврата int могут не объявляться перед вызовом. Функции с другими типами возвратов не могут быть вызваны прежде, чем они будут определены или объявлены.

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



Формальные параметры

Формальные параметры - это переменные, которые принимают значения, переданные функции от функционального вызова. Формальные параметры объявляются в списке параметров в начале описания функции. Список параметров определяет имена параметров и порядок, в котором они принимают значения при вызове функции.

Тело функции

Тело функции - это просто составной оператор. Составной оператор содержит операторы, которые определяют действия функции, и может также содержать объявления переменных, используемых в этих операторах. Все переменные, объявленные в теле функции, имеют тип памяти auto, если они не объявлены иначе. Когда вызывается функция, то создается память для локальных переменных и производится их инициализация (если она задана). Управление передается первому оператору составного оператора и начинается процесс выполнения, который продолжается до тех пор, пока не встретится оператор return или конец тела функции. Управление при этом возвращается в точку вызова.

Если функция возвращает значение, то должен быть выполнен оператор return, содержащий выражение.

Значение возврата не определено, если не выполнен оператор return или если в оператор return не было включено выражение.

Объявления функции

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

Функции могут быть объявлены неявно или в forward-объявлениями. Тип возврата функции, объявленный ии неявно или в forward-объявлении, должен соответствовать типу возврата в определении функции. Неявное объявление имеет место всякий раз, когда функция вызывается без предварительного объявления или определения. Си-компилятор неявно объявляет вызываемую функцию с типом возврата int. По умолчанию функция объявляется с классом памяти extern. Определение функции может переопределить класс памяти на



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

Если спецификатор класса памяти static задается в forward-объявлении, то функция имеет класс static. Поэтому определение функции должно быть также специфицировано классом памяти static.

Если задан спецификатор класса памяти extern или спецификатор опущен, то функция имеет класс памяти extern. Однако определение функции может переопределить класс памяти на static, обеспечив себе появление ниже объявлений в том же самом исходном файле

Forward-объявление имеет важные различные применения. Они задают тип возврата для функций, которые возвращают любой тип значений, за исключением int. (Функции, которые возвращают значение int, могут также иметь forward-объявления, но делать это не требуется).

Если функция с типом возврата не int вызывается перед ее определением или объявлением, то результат неопределен. Forward-объявления могут быть использованы для задания типов аргументов, ожидаемых в функциональном вызове.

Список типов аргументов forward-объявления задает тип и число предполагаемых аргументов. (Число аргументов может меняться). Список типов аргументов - это список имен типов, соответствующих списку выражений в функциональном вызове.

Если список типов аргументов не задан, то не производится контроль типов. Несоответствие типов между действительными аргументами и формальными параметрами разрешено.

Вызовы функций

Вызов функции - это выражение, которое передает управление и фактические аргументы (если они есть) функции. Вызов функции имеет следующее синтаксическое представление:

<expression> ([<expression-list>])

Выражение <expression> вычисляется как адрес функции. Список выражение <expression-list>, в котором выражения следуют через запятую, представляет список фактических



1 ... 24 25 26 [ 27 ] 28 29 30 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика