Вопрос

Возможный дубликат:
Что означает «статический» в программе C?

Что это static Ключевое слово означает в C?

Я использую ANSI-C. Я видел в нескольких примерах кода, они используют static Ключевое слово перед переменными и перед функциями. Какова цель в случае использования с переменной? И какова цель в случае использования с функцией?

Это было полезно?

Решение

Как краткий ответ, есть два использования для static Ключевое слово при определении переменных:

1- переменные, определенные в области файла с static ключевое слово, т.е. Определенные внешние функции будут видны только в этом файле. Любая попытка получить доступ к ним из других файлов приведет к неразрешению символа во время ссылки.

2- переменные, определенные как static Внутри блока внутри функции будет сохраняться или «выжить» по разным призыву одного и того же кодового блока. Если они определены инициализированы, то они инициализируются только один раз. static переменные, как правило, гарантированно инициализируются в 0 по умолчанию.

Другие советы

static В рамках тела функции, т.е. используемой в качестве классификатора хранилища переменной, эта переменная сохраняет свое значение между вызовами функций - можно вполне сказать, что статическая переменная в функции является глобальной переменной, видимой только для этой функции. Это использование static всегда делает функцию, которую используется в потоке небезопасно Вы должны избежать этого.

Другой вариант использования использует static Что касается глобальной области, то есть для глобальных переменных и функций: статические функции и глобальная переменная являются локальными для компиляции, то есть они не отображаются в таблице экспорта скомпилированного бинарного объекта. Таким образом, они не загрязняют пространство имен. Объявление Static все функции и глобальные переменные, которые не могут быть доступны извне рассматриваемого единицы компиляции (т.е. файл C), является хорошей идеей! Просто имейте в виду, что статические переменные не должны быть помещены в файлы заголовков (за исключением того, что я очень редкие особые случаи).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top