Программирование на C и C++

Онлайн справочник программиста на C и C++

Локализация переменных

Прежде чем продолжать дискуссию о перегрузке конструкторов, стоит обсудить важное разли­чие между объявлением локальных переменных в С и тем способом, каким они могут быть объяв­лены в С++. В С необходимо объявлять все локальные переменные блока в самом начале этого блока. Нельзя объявлять переменные в блоке где попало. Например, в С следующий фрагмент кода не является корректным:

/* некорректно в С */
void f()
{
int i;
i = 10;
int j ;
/* ... */
}

Поскольку оператор присваивания i=10 попадает между двумя объявлениями i и j, то компиля­тор С выдаст ошибку и откажется компилировать эту функцию. Однако в С++ этот фрагмент абсолютно приемлем и компилятор не обнаружит ошибки. В С++ локальная переменная может объявляться где угодно в блоке. Более того, она оказывается известной только тому коду, кото­рый следует после нее в блоке.

Ниже представлен другой пример, показывающий, каким способом локальные переменные могут объявляться в блоке при использовании языка С++:

#include <iostream.h>
#include <string.h>
int main()
{
int i;
i = 10;
int j = 100; // совершенно корректно в С++
cout << i*j << "\n";
cout << "Enter a string: ";
char str[80]; // также корректно в С++
cin >> str;
// вывод строки в обратном порядке
int к; // в С++, объявление к там, где она нужна
к = strlen(str);
к--;
while(к>=0 ) {
cout << str [к];
к--;
}
return 0;
}

Все, что эта программа иллюстрирует, заключается в том, что, используя С++, можно объявлять локальные переменные где угодно в блоке кода. Поскольку философия языка С++ тесно связана с инкапсуляцией кода и данных, то имеет смысл объявлять переменные вблизи того кода, кото­рый их использует, а не при входе в блок. Здесь объявления i и j разделены между собой просто для иллюстрации. Однако можно видеть, каким образом локализация k вблизи соответствующего кода помогает инкапсуляции этой процедуры. Объявление переменных вблизи той точки, где они будут использованы, помогает избежать случайных побочных эффектов. Эта черта языка С++ также удобна при создании объектов, что иллюстрируется в следующем разделе.