Программирование >>  Перегруженные имена функций и идентификаторы 

1 2 3 4 [ 5 ] 6 7 8 ... 210


отличны от всех имен переменных и функций с той же самой видимостью, а также от имен формальных параметров и перечислимых констант. Подобно именам переменных, имена, используемые для typedef типов могут быть переопределены внутри блоков программы.

Теги перечислений, структур и совмещений сгруппированы вместе в одном классе имен. Каждый тег перечисления, структуры или соединения должен быть отличен от других тегов с той же самой видимостью. Теги не конфликтуют с любыми другими именами.

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

Метки операторов формируют отдельный класс имен. Каждая метка оператора должна быть отлична от всех других меток операторов в той же самой функции. Метки операторов могут совпадать с именами меток других функций.

Пример:

struct student char student[20]; int class; int id; student;

В этом примере имя тега структуры, элемента структуры и переменной относятся к трем различным классам имен, поэтому не будет противоречия между тремя объектами с именем student. Компилятор определит по контексту программы как интерпретировать каждый из случаев. Например, когда имя student появится после ключевого слова struct, это будет означать, что появился tag структуры. Когда имя student появится после операции выбора элемента -> или ., то это означает, что имя ссылается на элемент структуры. В другом контексте имя student является переменной структурного типа.



Объявления

Объявления Си имеют следующий синтаксис:

[<sc-specifier>][<type-specifier>]<declarator>[=<initializer>] [,<declarator>[=<initializer>...],

где:

<sc-specifier>

Спецификатор класса памяти.

<type-specifier>

Имя определяемого типа.

<declarator>

Идентификатор, который может быть модифицирован при объявлении указателя, массива или функции.

<initializer>

Задает значение или последовательность значений, присваиваемых переменной при объявлении.

Все переменные Си должны быть явно объявлены перед их использованием. Функции Си могут быть объявлены явно или неявно в случае их вызова перед определением.

Язык Си определяет стандартное множество типов данных. К этому множеству можно добавлять новые типы данных посредством их объявлений на типах данных уже определенных.

Объявление Си требует одного или более деклараторов. Декларатор - это идентификатор, который может быть определен с квадратными скобками [], звездочкой * или круглыми скобками () для объявления массива, указателя или функции. Когда объявляется простая переменная (такая как символ, целое или плавающее), структура или совмещение простых переменных, то декларатор - это идентификатор.

В Си определено четыре спецификатора класса памяти, а именно: auto, extern, register и static.

Спецификатор класса памяти определяет, каким образом объявляемый объект запоминается и инициализируется и из каких частей программы можно сс1латься на него. Расположение объявления внутри программы, а также наличие или отсутствие других объявлений - также важные факторы при определении видимости переменных.



Спецификаторы типов

Язык Си поддерживает определения для множества базовых типов данных, называемых основными типами.

signed char float void signed int double

signed short int signed long int unsigned char unsigned int unsignet short int unsigned long int

Перечислимые типы также рассматриваются как основные типы.

Типы signed char, signed int, signed short int и signed long int

вместе с соответствующими двойниками unsigned называются типами целых.

Спецификаторы типов float и double относятся к типу плавающих. В объявлениях переменных и функций можно использовать любые спецификаторы целый и плавающий.

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

Можно задать дополнительные спецификаторы типа путем объявления typedef.

При записи спецификаторов типов допустимы сокращения. В целых типах ключевое слово signed может быть опущено. Так, если ключевое слово unsigned опускается в записи спецификатора типа, то тип целого будет знаковым, даже если опущено ключевое слово signed.

В некоторых реализациях могут быть использованы опции компилятора, позволяющие изменить умолчание для типа char со знакового на беззнаковый. Когда задана такая опция, сокращение char имеет то же самое значение, что и unsigned char, и следовательно ключевое слово sidned должно быть записано при объявлении символьной величины со знаком.

Тип char используется для запоминания буквы, цифры или символа из множества представимых символов. Значением объекта типа char является ASCII код, соответствующий данному



1 2 3 4 [ 5 ] 6 7 8 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика