Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по С++ глава 2.doc
Скачиваний:
6
Добавлен:
05.11.2018
Размер:
249.86 Кб
Скачать

2.3.1. Комментарии

Наряду со стандартными ограничителями комментария (/* и */) в программе C++ можно задать комментарий-строку двумя символами //. Все символы, следующие за символами // до конца строки, являются частью комментария и пропускаются компилятором.

void main () // это комментарий-строка

{

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

// операторы ...

}

2.3.2. Операторы объявления переменных

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

Примечание

Блок – фрагмент кода, ограниченный символами { и }. На переменную, определенную внутри блока, можно ссылаться только внутри этого или внутри вложенного блоков (если она не скрыта переменной с таким же именем внутри вложенного блока). Таким образом, блок определяет область видимости переменной.

В языке C++ код можно сделать более легким для чтения и сопровождения, помещая определение переменной непосредственно перед кодом, который ее использует, например:

void main()

{

// другие операторы ,..

int Count =0;

while (++Count <= 100)

{

// операторы цикла ...

}

// другие операторы ...

}

Переменную можно объявить даже внутри цикла for.

// другие операторы …

for (int i = 0; i < MAXLINES; ++i)

{

// другие операторы ...

int Length = GetLineLength (i);

if (Length = 0) break;

// другие операторы ...

}

if (i < MAXLINES)

// встретилась строка длиной О

В приведенном коде считается, что объявление счетчика цикла i встречается за пределами блока, следующего непосредственно за оператором for. Следовательно, ссылаться на переменную счетчика можно и после блока for, а переменная Length, объявленная внутри блока for, доступна только внутри этого блока.

Если объявление включает инициализацию, элемент данных инициализируется при выполнении оператора объявления. Так, в приведенном примере переменная i создается и инициализируется однократно, когда программное управление достигает оператора for; а переменная Length создается и инициализируется на каждой итерации цикла for.

Примечание

Если локальная переменная объявлена как статическая (ключевое слово static), то она создается и инициализируется только один раз, когда программное управление впервые достигает оператора объявления переменной.

Обратите внимание: если объявление переменной содержит инициализацию, то необходимо убедиться, не пропущен ли оператор объявления, как в следующей конструкции switch, компиляция которой вызывает сообщение об ошибке.

switch (Code)

{

case 1:

// ...

break;

case 2:

int Count =0; // ошибка

// ...

break;

case 3:

// ...

break;

}

Компилятор генерирует ошибку по следующей причине: переменная Count инициализируется только тогда, когда управление достигает ветви case 2 оператора switch. Если управление передается ветви case 3, содержащей обращение к переменной Count, то она не будет инициализирована. Ветвь case 3 имеет доступ к переменной Count, так как объявление переменной предшествует данной ветви внутри того же блока. Компилятор сгенерирует ошибку, даже если код в этой ветви действительно не использует переменную Count. Важен факт, что использование возможно. Для исправления ошибки нужно поместить код ветви case 2 внутри ее собственного блока, например:

case 2:

{

int Count = 0;

// ...

break;

}

В таком варианте оператора switch ссылаться на переменную Count можно только внутри ветви case 2. В противном случае можно убрать инициализацию из объявления и присвоить переменной Count начальное значение.

case 2:

int Count;

Count = 0;

// ...

break;