Константы (литералы)

Ключевые слова

Идентификаторы (имена) языка Си

Алфавит языка Си

Алфавит Си включает:

– прописные и строчные буквы английского алфавита: A,…,Z, a,…,z;

– арабские цифры 0, 1,…, 9;

– специальные символы:

– пробельные символы (неотображаемые символы): пробел, табуляция, перевод строки, новая строка, возврат каретки, новая страница, вертикальная табуляция,

– другие символы: , . ; : ? ‘ ! “ / | \ ~ _ ( ) { } [ ] > < # % & ^ - = + * (в некоторых компиляторах, например, Visual C++ разрешается в идентификаторах использовать символ $).

Символы алфавита находятся в первой половине кодовой таблицы (первые 128 символов) кодировки ASCII.

Из символов алфавита строятся лексемы.

Лексема – единица текста программы, имеющая для компилятора самостоятельный смысл.

Примеры лексем: идентификаторы, ключевые (зарезервированные) слова, знаки операций, константы, разделители.

 

Идентификатор (имя переменной, функции или другого объекта) – это последовательность букв английского алфавита, десятичных цифр, символа подчеркивания, начинающаяся не с цифры (в некоторых компиляторах, например, Visual C++ разрешается в идентификаторах использовать символ $).

Прописные и строчные буквы в идентификаторах различаются (идентификаторы х и Х это разные имена).

Примеры верных идентификаторов: x, X, abc124, A_c3, x4er, x_, __d.

Примеры неверных идентификаторов (первый символ – цифра): 1c, 4sd.

 

Ключевые слова – это зарезервированные идентификаторы, имеющие специальное значение для компилятора.

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

Список ключевых слов языка Си:

auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

 

Дополнительно компилятор Microsoft Visual C++ включает следующие ключевые слова:

__asm dllimport2 __int8 naked2
__based1 __except __int16 __stdcall
__cdecl __fastcall __int32 thread2
__declspec __finally __int64 __try
dllexport2 __inline __leave

 

Константа – это значение, которое не может быть изменено в процессе работы программа.

В языке Си выделяют следующие разновидности констант, которые могут иметь разные типы и формы представления:

1. Целые константы.

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

- тип int (по умолчанию), в оперативной памяти константа данного типа кодируется в MS DOS – 2 байтами, в Win32 – 4 байтами, примеры: 1245, 6, 175, 5, 1425;

- тип long – в оперативной памяти константа кодируется 4 байтами, константа будет иметь этот тип, если диапазон выходит за тип int (в MS DOS), или явно указывается тип с помощью суффикса l (L), примеры: 12l, 14567L, 125234 (для MS DOS);

- константы могут быть представлены типами unsigned int и unsigned long, для явного указания необходимо использовать суффикс u (U), примеры 105u (unsigned int), 105ul(unsigned long).

Целые константы всегда задают неотрицательные значения, для задания отрицательного значения используют операцию унарный минус, которую применяют к целой константе: -1000, -200l.

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

- в десятичной системе счисления (по умолчанию) – 1234, 378l, 346;

- в шестнадцатеричной системе счисления, признаком данного представления являются 2 первых символа константы 0x (или 0X), в константе можно использовать шестнадцатеричные цифры: 0..9, A (a), B (b), …, F (f), примеры – 0x10, 0x10acd, 0XFFFF;

- в восьмеричной системе счисления, признаком данного представления является первый символ 0, в константе можно использовать восьмеричные цифры: 0..7, примеры – 010, 070, 01237;

2. Вещественные константы.

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

Существует следующие три типа вещественных констант:

- тип double (по умолчанию), в оперативной памяти константа кодируется 8 байтами, примеры: 12.5, .123, 0.5, 1. (наличие точки в таком представлении обязательно);

- тип float – 4 байта, используется суффикс f (F), примеры: 10.5f, 0.123F;

- тип long double – 10 байт, используется суффикс l (L), примеры: 10.5l, 0.9L.

Существуют две формы представления вещественных констант:

- форма с точкой (десятичная форма), примеры: 10.125, 1. (значение 1.0), .125 (значение 0.125), 0.125, представляется в форме десятичной дроби, состоит из трех основных элементов целой части, точки, дробной части, причем, целая или дробная часть могут отсутствовать, наличие точки обязательно, если целая часть отсутствует, то она считается равной 0, если дробная часть отсутствует, то она также считается равной 0 ;

- форма со знаком экспоненты (экспоненциальная форма): 1e-5 , 12.23E4F (тип константы float), представляется в виде мантиссы и порядка, мантисса записывается слева от знака экспоненты (Е или е), порядок — справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. .

3. Символьные константы. Изначально в Си стандарта ANSI символьные константы представлялись одним символом, который мог быть буквой, цифрой, знаком пунктуации или специальный символом, заключенным в апострофы, примеры, ‘a’, ‘d’, ‘1’, ‘.’, ‘ ‘, данные константы представлены в памяти типом char и занимают 1 байт. Значением символьной константы является числовое значение кода символа в кодировке, используемой в данной операционной системе, например, в кодировке ASCII.

Символьные константы могут участвовать в арифметических операциях на правах полноценных целых чисел, хотя чаще их сравнивают с другими символами. Некоторые символы представляются в символьных и строковых константах с помощью специальных управляющих последовательностей символов, начинающихся с ‘\’ (косая обратная наклонная черта), называемых эскейп- последовательностями. Примеры: ‘\\’ - символ обратный слеш, ‘\’’ - символ апостроф, ‘\”’ - символ двойные кавычки, ‘\n’ – символ конец строки (код 10), ‘\r’ – возврат каретки (код 13), ‘\a’ – звуковой сигнал (код 7), ‘\b’ – возврат на шаг (забой) (код 8). Кроме того, любой символ можно представить в виде его кода в восьмеричной или шестнадцатеричной системах счисления в форматах ‘\ooo’ или ‘\xhh’, где o – восьмеричная цифра, а h – шестнадцатеричная цифра (значение восьмеричное кода не может превышать 255). Например, символ пробел с десятичным кодом 32 может быть записан как ‘ ‘, или в шестнадцатеричном коде как ‘\x20’, или в восьмеричном коде как ‘\40’.

В некоторых компиляторах, например, Visual C++ разрешены много символьные константы (до 4-х символов): ‘asdf’, ‘GR’, они представлены в памяти типом int (первый символ – младший байт).

4. Строковые константы – последовательность символов, заключенных в кавычки (не в апострофы), внутри строковых констант допускается использовать эскейп- последовательности или коды символов. Пример: “начало строки\nтекст с новой строки”, при печати текст будет выводится на две строки. Формально строковая константа является массивом символов. Во внутреннем представлении строки в оперативной памяти в конце присутствует нулевой символ ‘\0’, так что физический объем памяти для хранения строки превышает количество символов, записанных между кавычками на единицу.

5. Константы типа перечислений. Можно создавать перечисляемый тип, содержащий константы. Переменным этого типа можно присваивать значения только этих констант. Данные константы представляются в памяти точно так же, как константы типа int.

Формат перечислений следующий:

enum <имя_типа> {

<имя1>[=<инициализатор1>],

<имя2>[=<инициализатор2>],

……………….

<имяN>[=<инициализаторN>] };

Идентификаторы <имя1>, <имя2>, …, <имяN> -выступают далее в качестве констант, по умолчанию, если нет инициализатора, первая константа инициализируется 0, каждая последующая на 1 больше.

Пример перечисления

enum A

{

a, // 0

b, // 1

c=10, // 10

d // 11

};

Далее в программе обращаться к данным константам, int i=b; переменной i будет присвоено значение 1.

6. Существует еще одна константа – это, так называемый, нулевой указатель, для задания которого введена именованная константа NULL, используется для задания значения указателя, который ни на что не указывает. Обычно соответствует значению 0, но не обязательно во всех системах.