Подтвердить что ты не робот

Что означает статическое значение в ANSI-C

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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