Программа на C++ состоит из последовательности внешних определений. Внешнее определение описывает идентификатор как имеющий класс памяти static и определяет его тип. Спецификатор типа (см. тут) может также быть пустым, и в этом случае принимается тип int. Область видимости внешних определений простирается до конца файла, в котором они описаны, так же, как действие описаний сохраняется до конца блока. Синтаксис внешних определений тот же, что и у описаний, за исключением того, что только на этом уровне и внутри описаний классов может быть задан код (текст программы) функции.
Определения функций
Определения функций имеют вид
определение_функции: спецификаторы_описания описатель_функции opt инициализа- тор_базового_класса opt тело_функции
Единственными спецификаторами класса памяти (sc-спецификаторами), допустимыми среди спецификаторов описания, являются extern, static, overload, inline и virtual. Описатель функции похож на описатель "функции, возвращающей ...", за исключением того, что он включает в себя имена формальных параметров определяемой функции. Описатель функции имеет вид
описатель_функции: описатель ( список_описаний_параметров )
Форма списка описаний параметров определена в этом разделе. Единственный класс памяти, который может быть задан, это тот, при котором соответствующий фактический параметр будет скопирован, если это возможно, в регистр при входе в функцию. Если в качестве инициализатора для параметра задано константное выражение, то это значение используется как значение параметра по умолчанию.
Тело функции имеет вид
тело_функции: составной_оператор
Вот простой пример полного определения функции:
int max (int a,int b,int c) { int m = (a > b) ? a : b; return (m > c) ? m : c; }
Здесь int является спецификатором типа ; max (int a, int b, int c) является описателем функции ; { ... } - блок, задающий текст программы (код) оператора.
Поскольку в контексте выражения имя (точнее, имя как формальный параметр) считается означающим указатель на первый элемент массива, то описания формальных параметров, описанных как "массив из ...", корректируются так, чтобы читалось "указатель на ...".
Инициализатор базового класса имеет вид
инициализатор_базового_класса: : ( список_параметров opt )
Он используется для задания параметров конструктора базового класса в конструкторе производного класса. Например:
struct base { base (int); ... }; struct derived : base { derived (int); ... };
derived.derived (int a) : (a+1) { ... }
derived d (10);
Конструктор базового класса вызывается для объекта d с параметром 11.
Определения внешних данных
Определения внешних данных имеют вид
определение_данных: описание
Класс памяти таких данных статический.
Если есть более одного определения внешних данных одного имени, то определения должны точно согласовываться по типу и классу памяти, и инициализаторы (если они есть), должны иметь одинаковое значение.
8 8 8
|