Использование статических переменных и функций в глобальном масштабе

Есть ли использование для пометки переменной как static, когда она находится в глобальной области .cpp файла, а не в функции?

Можете ли вы использовать статическое ключевое слово для функций? Если да, каково их использование?

Ответ 1

В этом случае ключевое слово static означает, что функция или переменная может использоваться только кодом в том же файле cpp. Соответствующий символ не будет экспортироваться и не будет использоваться другими модулями.

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

Ответ 2

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


Кстати, использование ключевого слова static устарело в С++ 03.

В разделе $7.3.1.1/2 из стандарта С++ (2003) читается

Использование ключевого слова static устарел при объявлении объектов в область пространства имен; безымянное пространство имен обеспечивает превосходное альтернатива.

С++ предпочитает неназванное пространство имен над ключевым словом static. Смотрите эту тему:

Превосходство неназванного пространства имен по статическому?

Ответ 3

В качестве примера -

// At global scope
int globalVar; // Equivalent to static int globalVar;
               // They share the same scope
               // Static variables are guaranteed to be initialized to zero even though
               //    you don't explicitly initialize them.


// At function/local scope

void foo()
{
    static int staticVar ;  // staticVar retains it value during various function
                            // function calls to foo();                   
}

Оба они перестают существовать только тогда, когда программа завершает/завершает работу.