Есть ли использование для пометки переменной как 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();
}
Оба они перестают существовать только тогда, когда программа завершает/завершает работу.