Состав языка программирования
Язык программирования, так же как и любой естественный язык, имеет свои:
алфавит-- | символы, которые можно использовать в программах; |
лексику -- | ключевые слова, идентификаторы, операторы; |
пунктуацию -- | знаки ; , . : и скобки ( ) { } |
синтаксис -- | выражения, конструкции; |
семантику -- | значение элементов языка для программиста и для компьютера. |
Алфавит С++ включает:
- Прописные и строчные буквы: a...z и A...Z, а в строковых и символьных константах а...я и А...Я
- Цифры: 0...9
- Специальные символы для различных целей (операторы, пунктуация и др.)
Программа на языке С++ состоит из элементов, называемых лексемами (token). Лексемы -- это наборы символов, распознаваемые компилятором языка. Компилятор С++ -- это программа, преобразующая текст на языке С++ в машинный код. Компилятор воспринимает текст программы как сплошной поток символов. Позиционирование операторов совершенно не важно. Лексемы разделяются пробельными символами, знаками табуляции, переходами на новую строку. Для читаемости программы текст все же лучше структурировать.
Лексемы:
- Ключевые слова (keywords).
- Идентификаторы (identifiers).
- Литералы (literals) или константы (constants).
- Операторы (operators).
- Знаки пунктуации (punctuators).
Особым элементом языка является создание комментариев (т.е. той части текста программы, которая будет игнорироваться компилятором). В языке С++ возможны два вида комментариев:
/* многострочный
комментарий */
с++; // однострочный комментарий до конца строки
Ключевые слова -- определенные зарезервированные слова, имеющие конкретное значение. Можно выделить следующие группы ключевых слов:
- ключевые слова для объявления типов;
- ключевые слова для создания языковых конструкций;
- остальные слова (для создания гетерогенных типов данных, для реализации принципов ООП и др.)
Ключевые слова в языке С++ всегда записываются прописными буквами. Например, if -- это ключевое слово для создания условной конструкции, а IF, If, iF может быть идентификаторами или константами и никогда не будут восприниматься компилятором как оператор.
Идентификаторы -- это последовательности латинских букв, цифр и символов подчеркивания ( _ ), обозначающае имена переменных. Прописные и строчные символы различаются. Например, x и X -- это разные переменые. Длина идентификатора могут быть произвольной, но лучше давать идентификаторам короткие имена, отражающие смысл значения, которое они описывают:
i // обычно целая переменная цикла
count // количество
buff_size // составное (из 2 слов) имя с символом _
g374 // непонятно
_foo // плохо
if // не может быть идентификатором, т.к. это ключевое слово
374q // не может начинаться с цифры
Литералы -- это постоянные значения (константы):
5 // целая константа
05 // целая константа в восьмеричной системе счисления
0х5 // целая константа в шестнадцатеричной системе счисления
5.0 // вещественная константа с двойной точностью
5.f // вещественная константа
'5' // символьная константа
"hello" // строковая константа
Операторы -- это символы, которые используются для составления арифметических и логических выражений. Они имеют строгий приоритет и порядок выполнения. Один и то же символ в зависимости от контекста может трактоваться по-разному. Некоторые операторы С++, приведенные в таблице, используются и в других языках или интуитивно понятны. Некоторые требуют пояснения:
Оператор (operator) | Назначеие (meaning) | Тип оператора (type) | Порядок выполнения (associativity) | |||
:: | область видимости (scope resolution) | unary | – | |||
[ ] | доступ к элементам массива (array subscript) | unary | слева направо | |||
( ) | вызов функции (function call) | multiple | слева направо | |||
type( ) | оператор преобразования типов, конструирования значения (conversion, constructor) | unary | – | |||
-> | операторы доступа к членам гетерогенных типов данных (member selection) | unary | слева направо | |||
++ | -- | постфиксный инкремент/декремент (postfix increment/decrement) | unary | – | ||
new | Динамическое размещение в памяти переменных и массивов (allocate) | binary | – | |||
delete | delete [] | удаление из памяти переменной/массива, размещенного динамически (deallocate) | binary | – | ||
++ | -- | префиксный инкремент/декремент (prefix increment/decrement) | unary | – | ||
* | получение значения по указателю (dereference) | unary | – | |||
& | получения указателя на переменную (address-of) | unary | – | |||
+ | унарный плюс (unary plus) | unary | – | |||
- | арифметическое отрицание (arithmetic negation) | unary | – | |||
! | отрицание/логическое НЕ (logical NOT) | unary | – | |||
~ | побитовое дополнение (bitwise complement) | unary | – | |||
sizeof | определение размера переменной (size of object) | unary | – | |||
typedef | определение имени типа (type name) | unary | – | |||
(type) | приведение типов (type cast) | unary | справа налево | |||
const_cast dynamic_cast reinterpret_cast static_cast | приведение типов (type cast) | unary | – | |||
.* | ->* | получение указателя на член класса (pointer to class member) | unary | слева направо | ||
* | / | умножение/деление (multiplication/division) | binary | слева направо | ||
% | остаток от деления (remainder) | binary | слева направо | |||
+ | - | сложение/вычитание (addition/subtraction) | binary | слева направо | ||
<< | >> | побитовый левый/правый сдвиг (left/right shift) | unary | слева направо | ||
< | > | <= | >= | сравнение (comparison) | binary | слева направо |
== | != | равенство/неравенство (equality/inequality) | binary | слева направо | ||
& | побитовое И (bitwise AND) | binary | слева направо | |||
^ | побитовое исключающее ИЛИ (bitwise exclusive OR) | binary | слева направо | |||
| | побитовое ИЛИ (bitwise OR) | binary | слева направо | |||
&& | || | логическое И/ ИЛИ (logical AND/OR) | binary | слева направо | ||
? : | арифметическая условная конструкция (ariftnetic if) | ternary | справа налево | |||
= | присваивание (assignment) | binary | справа налево | |||
*= | /= | умножение/деление с присваиванием (multiplication/division assignment) | binary | справа налево | ||
%= | остаток от деления с присваиванием (modulus assignment) | binary | справа налево | |||
+= | -= | сложение/вычитание с присваиванием (addition/subtraction assignment) | binary | справа налево | ||
<<= | >>= | побитовый левый/правый сдвиг с присваиванием (left/right shift assignment) | binary | справа налево | ||
&= | побитовое И с присваиванием (bitwise AND assignment) | binary | справа налево | |||
|= | побитовое ИЛИ с присваиванием (bitwise inclusive OR assignment) | binary | справа налево | |||
^= | побитовое исключающее ИЛИ с присваиванием (bitwise exclusive OR assignment) | binary | справа налево | |||
throw | генерация исключения | unary | – | |||
, | разделитель (comma) | unary | слева направо | |||
Знаки пунктуации используются для логического разделения текста программы. Например,
; -- заканчивает арифметическое выражение или оператор;
, -- используется для разделения в перечислениях переменных, констант, аргументов и т.п.;
{} -- ограничивает группу выражений или операторов;
() -- используется для описания аргументов функций.