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