Что означает статическое значение в ANSI-C
Возможный дубликат:
Что означает "статическое" в программе на C?
Что означает ключевое слово static
в C?
Я использую ANSI-C. Я видел несколько примеров кода, они используют ключевое слово static
перед переменными и перед функциями. Какова цель использования с переменной? И какова цель в случае использования с функцией?
Ответы
Ответ 1
В качестве краткого ответа есть два варианта использования ключевого слова static
при определении переменных:
1- Переменные, определенные в области файлов с ключевым словом static
, то есть определенные внешние функции будут видны только внутри этого файла. Любая попытка получить к ним доступ из других файлов приведет к неразрешенному символу во время соединения.
2- Переменные, определенные как static
внутри блока внутри функции, будут сохраняться или "выживать" в разных вызовах одного и того же кодового блока. Если они определены инициализированы, то они инициализируются только один раз. Обычно переменные static
обычно инициализируются на 0
.
Ответ 2
static
внутри тела функции, т.е. используется как классификатор хранения переменных, делает эту переменную для сохранения ее значения между вызовами функций - можно сказать, что статическая переменная внутри функции является глобальной переменной, видимой только для этого функция. Это использование static
всегда делает функцию, которую он использует в потоке небезопасно, вы должны избегать этого.
В другом случае используется static
в глобальной области, то есть для глобальных переменных и функций: статические функции и глобальная переменная являются локальными для единицы компиляции, то есть они не отображаются в таблице экспорта скомпилированных двоичный объект. Таким образом, они не загрязняют пространство имен. Объявление статических функций и глобальных переменных, которые не могут быть доступны извне компиляционной единицы (т.е. Файл C), является хорошей идеей! Просто имейте в виду, что статические переменные не должны помещаться в заголовочные файлы (за исключением очень редких особых случаев).