ОБЪЯВЛЕНИЯ

Исходная программа

СТРУКТУРА ПРОГРАММЫ

В этом разделе описывается структура исходной программы на Си и определяются термины, используемые в последующих разделах руководства при описании языка. По сути, здесь представлен общий обзор особенностей языка Си, которые в дальнейшем рассмотрены в деталях.

Исходная программа- это совокупность следующих об"ектов: директив, указаний компилятору, об"явлений и определений. Дирек­тивы задают действия препроцессора по преобразованию текста прог­раммы перед компиляцией. Указания компилятору- это команды, вы­полняемые компилятором во время процесса компиляции. Об"явления задают имена и атрибуты переменных, функций и типов, используемых в программе. Определения- это об"явления, определяющие переменные и функции.

Определение переменной в дополнении к ее имени и типу зада­ет начальное значение об"явленной переменной. Кроме того, опреде­ление предполагает распределение памяти для переменной.

Определение функции специфицирует ее структуру, которая

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

Исходная программа может содержать любое число директив,

указаний компилятору, об"явлений и определений. Любой из об"ектов программы имеет определенный синтаксис, описанный в этом руковод­стве,и каждая составляющая может появляться в любом порядке, хотя влияние порядка, в котором следуют переменные и функции может быть использовано в программе (см. раздел 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.