ОБЪЯВЛЕНИЯ
Исходная программа
СТРУКТУРА ПРОГРАММЫ
В этом разделе описывается структура исходной программы на Си и определяются термины, используемые в последующих разделах руководства при описании языка. По сути, здесь представлен общий обзор особенностей языка Си, которые в дальнейшем рассмотрены в деталях.
Исходная программа- это совокупность следующих об"ектов: директив, указаний компилятору, об"явлений и определений. Директивы задают действия препроцессора по преобразованию текста программы перед компиляцией. Указания компилятору- это команды, выполняемые компилятором во время процесса компиляции. Об"явления задают имена и атрибуты переменных, функций и типов, используемых в программе. Определения- это об"явления, определяющие переменные и функции.
Определение переменной в дополнении к ее имени и типу задает начальное значение об"явленной переменной. Кроме того, определение предполагает распределение памяти для переменной.
Определение функции специфицирует ее структуру, которая
представляет собой смесь из об"явлений и операторов, которые образуют саму функцию. Определение функции также задает имя функции, ее формальные параметры и тип возвращаемой величины.
Исходная программа может содержать любое число директив,
указаний компилятору, об"явлений и определений. Любой из об"ектов программы имеет определенный синтаксис, описанный в этом руководстве,и каждая составляющая может появляться в любом порядке, хотя влияние порядка, в котором следуют переменные и функции может быть использовано в программе (см. раздел 3.5 "Время жизни и видимость").
Нетривиальная программа всегда содержит более одного определения функции. Функция определяет действия, выполняемые программой.
В следующем примере иллюстрируется простая исходная программа на языке Си.
int x = 1;/* Variable definitions */
int y = 2;
extern int printf(char *,...);/* Function declaration */
main () /* Function definition for main function */
{
int z; /* Variable declarations */
int w;
z = y + x; /* Executable statements */
w = y - x;
printf("z = %d \nw = %d \n", z, x);
}
Эта исходная программа определяет функцию с именем main и об"являет функцию printf. Переменные x и y задаются своими определениями. Переменные z и w только об"являются.
В этом разделе описываются форматы и составные части об"явлений переменных, функций и типов. Об"явления Си имеют следующий синтаксис:
[<sc-specifier>][<type-specifier>]<declarator>[=<initializer>] [,<declarator>[=<initializer>...],
где:
<sc-specifier>- спецификатор класса памяти; <type-specifier>- имя определяемого типа;
<declarator>- идентификатор, который может быть модифицирован при об"явлении указателя, массива или функции;
<initializer>- задает значение или последовательность значений, присваиваемых переменной при об"явлении.
Все переменные Си должны быть явно об"явлены перед их использованием. Функции Си могут быть об"явлены явно или неявно в случае их вызова перед определением.
Язык Си определяет стандартное множество типов данных. К этому множеству можно добавлять новые типы данных посредством их
об"явлений на типах данных уже определенных.
Об"явление Си требует одного или более деклараторов. Декларатор- это идентификатор, который может быть определен с квадратными скобками ([]), эвездочкой (*) или круглыми скобками () для об"явления массива, указателя или функции. Когда об'является простая переменная (такая как символ, целое или плавающее), структура или совмещение простых переменных, то декларатор- это идентификатор.
В Си определено четыре спецификатора класса памяти, а именно: auto, extern, register и static.
Спецификатор класса памяти определяет, каким образом об"являемый об"ект запоминается и инициализируется и из каких частей программы можно ссылаться на него. Расположение об"явления внутри программы, а также наличие или отсутствие других об"явлений- также важные факторы при определении видимости переменных.
Об"явления функций описаны в разделе 4.4.