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