Есть ли использование для пометки переменной как static, когда она находится в глобальной области .cpp файла, а не в функции?
Можете ли вы использовать статическое ключевое слово для функций? Если да, каково их использование?
Есть ли использование для пометки переменной как static, когда она находится в глобальной области .cpp файла, а не в функции?
Можете ли вы использовать статическое ключевое слово для функций? Если да, каково их использование?
В этом случае ключевое слово static означает, что функция или переменная может использоваться только кодом в том же файле cpp. Соответствующий символ не будет экспортироваться и не будет использоваться другими модулями.
Это хорошая практика, чтобы избежать столкновения имени в большом программном обеспечении, когда вы знаете, что ваши глобальные функции или переменные не нужны в других модулях.
Да, если вы хотите объявить переменную области видимости файла, тогда требуется ключевое слово static. static переменные, объявленные в одной единицы перевода, не могут быть отнесены к другим единицам перевода.
Кстати, использование ключевого слова static устарело в С++ 03.
В разделе $7.3.1.1/2 из стандарта С++ (2003) читается
Использование ключевого слова static устарел при объявлении объектов в область пространства имен; безымянное пространство имен обеспечивает превосходное альтернатива.
С++ предпочитает неназванное пространство имен над ключевым словом static. Смотрите эту тему:
Превосходство неназванного пространства имен по статическому?
В качестве примера -
// 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();                   
}
Оба они перестают существовать только тогда, когда программа завершает/завершает работу.