Пунктуаторы

Пунктуаторы, также называемые разделителями, определяются следующим образом:

пунктуатор: одно из [ ] () { },;:... * = #

Открывающая и закрывающая квадратные скобки – [ ] содержат индексы одно- и многомерных массивов, например:

char ch, str[ ] = "Stan"; /* объявлена строка символов */

int mat[3][4]; /* объявлена матрица 3 x 4 */

ch = str[3]; /* переменной ch присваивается 4 – й символ из строки str */

Открывающая и закрывающая круглые скобки – () меняют приоритеты операций в выражении, содержат условия условных выражений и указывают на вызовы функций и параметры функций, например:

d = c * (a + b); /* изменение приоритета */

if (d == z) ++x; /* содержит условие условного оператора */

func(); /* вызов функции без аргументов */

int (*fptr)(); /* объявление указателя функции */

fptr = func; /* отсутствие () означает указатель функции */

void func2(int n); /* объявление функции с аргументами */

Рекомендуется использовать круглые скобки в макроопределениях, что позволяет избежать возможных проблем с приоритетами операций во время расширения, например:

#define CUBE(x) ((x) * (x) * (x))

Открывающие и закрывающие фигурные скобки – { } обозначают начало и конец составного оператора, например:

if (d == z)

{

++x;

func();

}

Закрывающая фигурная скобка служит концом составного оператора, поэтому точка с запятой (;) после фигурной скобки (}) не требуется, за исключением структур или объявлений классов. Часто точка с запятой не допустима, как, например, в следующем случае

if ( оператор )

{}; /* недопустимое использование точки с запятой */

else …

Запятая (,) отделяет элементы списка аргументов функции, например:

void func(int n, float f, char ch);

Запятая часто используется как операция в выражениях. Смешивание различного использования запятой допустимо, но чтобы их различать, необходимо применять круглые скобки. Например:

func(i, j); /* вызов функции с двумя аргументами */

func((exp1, exp2), (exp3, exp4, exp5)); /* вызов функции с 2 аргументами */

Точка с запятой (;) указывает на конец оператора (конец предложения). Любое допустимое выражение языка С или С++ (включая и пустое выражение), за которым следует (;), интерпретируется как оператор, называемый оператором выражения. Выражение вычисляется, а его значение отбрасывается. Если такое выражение не имеет побочных эффектов, то компилятор языка C++ может его проигнорировать. Например:

a + b; /* a + b вычисляется, но полученное значение теряется */

++a; /* имеется побочный эффект для a */

; /* пустое выражение = нулевой оператор */

Точки с запятой часто используются для создания пустых операторов:

for (i = 0; i < t; i++)

{

;

}

Двоеточие (:) служит для обозначения метки оператора, например:

start:x=0;

...

goto start;

...

или

switch (a) {

case 1: puts(" Первый "); break;

case 2: puts(" Второй "); break;

...

default: puts(" Ни тот, ни другой !"); break;

}

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

void func(int n, char ch,...);

Данное объявление указывает, что func будет определена таким образом, что вызовы ее должны содержать, как минимум, два аргумента, int и char, но также могут иметь и любое число дополнительных аргументов.

В языке С++ запятую, предшествующую многоточию, можно опустить.

Звездочка (*) в объявлении переменной обозначает создание указателя на тип, например:

char *char_ptr; /* объявление указателя на тип char */

Можно объявить указатели с несколькими уровнями вложенности, что обозначается соответствующим количеством звездочек:

int ** int_ptr; /* указатель на указатель на тип int */

double *** double_ptr /* указатель на указатель на указатель на тип double */

Звездочка также используется в качестве операции обращения по адресу, либо операции умножения:

i = *int_ptr; /* переменной i присваивается значение, содержащееся по адресу int_ptr */

a = b * 3.14; /* операция умножения */

Знак равенства (=) разделяет объявления переменных от списков инициализации:

int x = 5; // инициализация переменной x;

char array[5] = { 1, 2, 3, 4, 5 }; // инициализация массива array;

В языке С++ объявления любого типа могут находиться (с некоторыми ограничениями) в любой точке внутри кода. В функциях языка С никакой код не может предшествовать никаким объявлениям переменных.

В списке аргументов функции С++ знак равенства указывает на значение параметра по умолчанию, например:

int f(int i = 0) {... } /* параметр i имеет значение по умолчанию ноль */

Знак равенства используется также как операция присвоения в выражениях:

a = b + c;

ptr = malloc(sizeof(float)*100);

Знак фунта (#) означает директиву препроцессора, если она является первым непробельным символом в строке.

Двойной знак фунта (##) используется как операция слияния лексем на фазе сканирования кода препроцессором, например:

#define VAR(i,j) (i##j) /* создание нового идентификатора ij */


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: