В объявлении простой переменной, массива и указателя спецификация типа может быть опущена. Если это объявление записано на внешнем уровне, то спецификация класса памяти тоже может быть опущена. В объявлении внутреннего уровня хотя бы одна из спецификаций — класса памяти или типа — должна присутствовать.
Объявление простой переменной
Синтаксис:
< спецификация типа > < идентификатор > [, < идентификатор >…];
Объявление простой переменной определяет имя переменной и ее тип. Имя переменной задается < идентификатором >. < Спецификация типа > задает тип переменной. Тип может быть базовым типом, либо типом структура, либо типом объединение. Если спецификация типа опущена, предполагается тип int.
Можно объявить несколько переменных в одном объявлении, задавая список < идентификаторов >, разделенных запятыми. Каждый < идентификатор > в списке именует отдельную переменную. Все переменные, заданные в таком объявлении, имеют одинаковый тип.
Примеры.
int х; /* пример 1 */
unsigned long reply, flag; /* пример 2 */
double order; /* пример 3 */
В первом примере объявляется простая переменная х. Эта переменная может принимать любое значение из области значений типа int.
Во втором примере объявлены две переменные: replyи flag. Обе переменные имеют тип unsigned long.
В третьем примере объявлена переменная order, которая имеет тип double.Этой переменной могут быть присвоены значения с плавающей точкой.
Объявление переменной перечислимого типа
Синтаксис:
enum [ < тег >]{ < список-перечисления >} < описатель >[,< описатель >…];
enum < тег > < идентификатор > [< идентификатор >…];
Объявление переменной перечислимого типа задает имя переменной и определяет список именованных констант, называемый списком перечисления. Каждому элементу списка перечисления ставится в соответствие целое число. Переменная перечислимого типа может принимать только значения из своего списка перечисления. Элементы списка имеют тип int. Поэтому переменной перечислимого типа выделяется ячейка памяти, необходимая для размещения значения типа int. Перечислимый тип, таким образом, представляет собой подмножество целого типа. Над объектами перечислимого типа определены те же операции, что и над объектами целого типа.
< Описатель > специфицирует либо переменную перечислимого типа, либо указатель на значение перечислимого типа, либо массив элементов перечислимого типа, либо функцию, возвращающую значение перечислимого типа, либо более сложный объект, являющийся комбинацией перечисленных типов.
Объявление переменной перечислимого типа начинается с ключевого слова enumи имеет две формы представления.
В первой форме задается список перечисления, содержащий именованные константы. Необязательный < тег > — это идентификатор, который именует перечислимый тип, специфицированный данным списком перечисления, < идентификатор > — это имя переменной перечислимого типа. В одном объявлении может быть описано более одной переменной данного перечислимого типа.
Во второй форме объявления список перечисления отсутствует, однако используется < тег > , который ссылается на перечислимый тип, объявленный в другом месте программы. Если заданный тег ссылается на неизвестный перечислимый тип либо область действия определения этого перечислимого типа не распространяется на текущий блок, то компилятор языка Си сообщает об ошибке. Допускаются объявление указателя на перечислимый тип и объявление typedefдля перечислимого типа, использующие тег ранее не определенного перечислимого типа. Однако этот тип должен быть определен к моменту использования этого тега или типа, объявленного посредством typedef.
< Список-перечисления > содержит одну или более конструкций вида:
< идентификатор > [=< константное-выражение >]
Конструкции в списке разделяются запятыми. Каждый <���идентификатор> именует элемент списка перечисления. По умолчанию, если не задано < константное-выражение >, первому элементу присваивается значение 0, следующему элементу—значение 1 и т. д. Элемент списка перечисления является константой.
Читать дальше