18.1. Внешнее определение функции
Определение функции имеет форму
определение-функции:
спецификаторы-описания описатель-функции
тело-функции
необ
Единственными спецификаторами класса памяти, допускаемыми в
качестве спецификаторов-описания, являются EXTERN или
STATIC; о различии между ними смотри п. 19.2. Описатель фун-
кции подобен описателю для “функции, возвращающей...”, за
исключением того, что он перечисляет формальные параметры
определяемой функции.
Оисатель-функции:
описатель (список-параметров
необ)
список параметров:
идентификатор
идентификатор, список-параметров
тело-функции имеет форму
тело-функции:
список-описаний составной-оператор
·
215 -
Идентификаторы из списка параметров и только они могут
быть описаны в списке описаний. Любой идентификатор, тип ко-
торого не указан, считается имеющим тип INT. Единственным
допустимым здесь спецификатором класса памяти является
REGISTER; если такой класс памяти специфицирован, то в нача-
ле выполнения функции соответствующий фактический параметр
копируется, если это возможно, в регистр.
Вот простой пример полного определения функции:
INT MAX(A, B, C)
INT A, B, C;
\(
INT M;
M = (A>B) ? A:B;
RETURN((M>C) ? M:C);
\)
Здесь INT - спецификатор-типа, MAX(A,B,C) - описатель-функ-
ции, INT A,B,C; - список-описаний формальных параметров, \(
... \) - Блок, содержащий текст оператора.
В языке “C” все фактические параметры типа FLOAT преоб-
разуются к типу DOUBLE, так что описания формальных парамет-
ров, объявленных как FLOAT, приспособлены прочесть параметры
типа DOUBLE. Аналогично, поскольку ссылка на массив в любом
контексте (в частности в фактическом параметре) рассматрива-
ется как указатель на первый элемент массива, описания фор-
мальных параметров вила “массив ...” приспособлены прочесть
: “указатель на ...”. И наконец, поскольку структуры,
объединения и функции не могут быть переданы функции, бесс-
мысленно описывать формальный параметр как структуру,
объединение или функцию (указатели на такие объекты, конеч-
но, допускаются).
18.2. Внешние определения данных
Внешнее определение данных имеет форму
определение-данных:
описание
Классом памяти таких данных может быть EXTERN (в частности,
по умолчанию) или STATIC, но не AUTO или REGISTER.
19. Правила, определяющие область действия
Вся C-программа необязательно компилируется одновремен-
но; исходный текст программы может храниться в нескольких
файлах и ранее скомпилированные процедуры могут загружаться
из библиотек. Связь между функциями может осуществляться как
через явные обращения, так и в результате манипулирования с
внешними данными.
Поэтому следует рассмотреть два вида областей действия:
во-первых, ту, которая может быть названа лексической об-
ластью действия идентификатора и которая по существу являет-
ся той областью в программе, где этот идентификатор можно
использовать, не вызывая диагностического сообщения “неопре-
деленный идентификатор”; и во-вторых, область действия, ко-
торая связана с внешними идентификаторами и которая характе-
ризуется правилом, что ссылки на один и тот же внешний иден-
тификатор являются ссылками на один и тот же объект.
· 216 -
19.1. Лексическая область действия
Лексическая область действия идентификаторов, описанных
во внешних определениях, простирается от определения до кон-
ца исходного файла, в котором он находится. Лексическая об-
ласть действия идентификаторов, являющихся формальными пара-
метрами, распространяется на ту функцию, к которой они отно-
сятся. Лексическая область действия идентификаторов, описан-
ных в начале блока, простирается до конца этого блока. Лек-
сической областью действия меток является та функция, в ко-
торой они находятся.
Поскольку все обращения на один и тот же внешний иденти-
фикатор обращаются к одному и тому же объекту (см. П. 19.2),
Компилятор проверяет все описания одного и того же внешнего
идентификатора на совместимость; в действительности их об-
ласть действия распространяется на весь файл, в котором они
находятся.
Во всех случаях, однако, есть некоторый идентификатор,
явным образом описан в начале блока, включая и блок, который
образует функцию, то действие любого описания этого иденти-
фикатора вне блока приостанавливается до конца этого блока.
Напомним также (п. 16.5), Что идентификаторы, соответст-
вующие обычным переменным, с одной стороны, и идентификато-
ры, соответствующие членам и ярлыкам структур и объединений,
с другой стороны, формируют два непересекающихся класса, ко-
торые не вступают в противоречие. Члены и ярлыки подчиняются
тем же самым правилам определения областей действия, как и
другие идентификаторы. Имена, специфицируемые с помощью
TYPEDEF, входят в тот же класс, что и обычные идентификато-
ры. Они могут быть переопределены во внутренних блоках, но
во внутреннем описании тип должен быть указан явно:
TYPEDEF FLOAT DISTANCE;
...
\(
AUTO INT DISTANCE;
...
Во втором описании спецификатор типа INT должен присутство-
вать, так как в противном случае это описание будет принято
за описание без описателей с типом DISTANCE (прим. Автора:
согласитесь, что лед здесь тонок.).
... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...
... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...
... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...
... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...
0 комментариев