C/C++ Функции, области видимости переменных
Функции
Самый важный инструмент в языках C и C++, они определяют действия, что вы можете делать с данными.
синтаксис:
type NameFunc(arguments)
{
//code
return type;
}
type – тип возвращаемого значения – выбор почти не ограничен – можно возвращать значения типа int, char, bool и тд. Может ничего не возвращать (void), можно возвращать ссылки, указатели, классы.
Примечание: return type; при типе возвращаемого значения void можно не писать.
arguments – аргументы, передаваемые в функцию, это поле м.б. пустым
Пример 1:
void PrintHelloWorld()
{
cout<<”HelloWorld”<<endl;
}
для вызова функции достаточно написать:
PrintHelloWorld();
Пример 2:
int Sum(char a, char b)
{
int Temp=a+b;
return Temp;
}
для вызова функции достаточно написать:
int c= Sum(10, 15); //где 10 и 15 – или числа, или аналогичные переменные типа char
Прототип функции и реализация:
Часто необходимо сделать так, чтобы функция была видна не только после написания ее реализации (ниже по коду), но и выше, для этого используются прототипы функций:
Рассмотрим на примере:
void Func(int a); //прототип функции
//code
void AnotherFunc(int b) //какая-то другая функция, используювая первую для расчетов
{
//code
Func(b+1)
}
//code
void Func(int a) //реализация функции
{
//code
cout<<“Func end”<<endl;
}
Тут реализация функции расположена ниже функции, что ее использует, и для решения проблемы мы использовали прототип функции, объявленный выше.
Область видимости переменных
Глобальные переменные
Глобальные переменные определены в файле программы вне любой из функций и могут использоваться любой функцией.
Локальные (автоматические) переменные
Локальные или автоматические переменные определяются внутри блока кода (например, внутри функции) и существуют только в рамках этого блока. При входе в блок для этих переменных выделяется память (которую еще называют автоматическая память), а после завершения работы этого блока, выделенная память освобождается, а объекты удаляются.
К автоматическим переменным может применяться ключевое слово auto:
Статические переменные
Кроме глобальных и автоматических есть особый тип переменных – статические переменные. Они определяются на уровне функций с помощью ключевого слово static. Если автоматические переменные определяются и инициализируются при каждом входе в функцию, то статические переменные инициализируются только один раз, а при последующих вызовах функции используется старое значение статической переменной.
Регистровые переменные
Регистровые переменные фактически являются также автоматическими переменные, но при их определении используется ключевое слово register. Это слово сообщает компилятору, что данная переменная будет интенсивно использоваться в приложении, поэтому ее желательно поместить в регистр процессора, что увеличит быстродействие.
Ключевое слово register применяется к переменным:
Сокрытие переменных
Автоматические переменные, определенные внутри блока кода, могут скрывать/переобозначать внешние переменные с тем же именем:
