К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

6. Определение глобальных переменных

Обычно глобальные переменные объявляют в верхней части кода, ниже директив #include, но выше любого другого кода. Например:

#include <iostream>
// Переменные, определенные вне блока, являются глобальными переменными
int g_x; // глобальная переменная g_x
const int g_y(3); // константная глобальная переменная g_y
void doSomething()
{
    // Глобальные переменные можно использовать в любом месте программы
    g_x = 4;
    std::cout << g_y << "\n";
}
int main()
{
    doSomething();
    // Глобальные переменные можно использовать в любом месте программы
    g_x = 7;
    std::cout << g_y << "\n";
    return 0;
}

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

#include <iostream>
 
int value(4); // глобальная переменная
int main()
{
    int value = 8; // эта переменная (локальная) скрывает значение глобальной переменной
    value++; // увеличивается локальная переменная value (не глобальная)
    ::value--; // уменьшается глобальная переменная value (не локальная)
    std::cout << "Global value: " << ::value << "\n";
    std::cout << "Local value: " << value << "\n";
    return 0;
} // локальная переменная уничтожается

Результат выполнения программы:

Global value: 3

Local value: 9

Использовать одинаковые имена для локальных и глобальных переменных — это прямой путь к проблемам и ошибкам, поэтому подобное делать не рекомендуется. Многие разработчики добавляют к глобальным переменным префикс g_ («g» от англ. «global»). Таким образом, можно убить сразу двух зайцев: определить глобальные переменные и избежать конфликтов имен с локальными переменными.

 


Предыдущая        В начало страницы       Следующая
6