Условия очистки:
1) static uint8_t tab[] = {1, 2};
2) void foo() { uint8_t tab2[] = {1, 2}; ...
Область действия:
1) Является ли переменная, объявленная в область действия файла .2) переменная, объявленная в локальной области действия .Область действия определяет, где переменная доступна.
- Локальные переменные, очевидно, доступны только внутри области, в которой они были объявлены.
- Переменные области видимости файла доступны по всему блоку перевода , где объявлена переменная.Единицей перевода является файл .c и все включенные в него файлы .h.
Срок хранения:
- Статическое время хранения означает, что переменная будет сохраняться на протяжении всего выполнения программы.Такие переменные всегда инициализируются перед вызовом
main()
, либо в ноль, либо в конкретное значение. - Длительность автоматического хранения означает, что переменная больше не будет действительной, когда счетчик программы выйдетобласть, в которой эта переменная была объявлена.Они имеют внутренние значения, если они не были явно инициализированы программистом.
Все переменные, объявленные в области видимости файла, имеют статическую продолжительность хранения.
Все переменные, объявленные как static
, имеют статическую продолжительность хранения.
ВсеПеременные, объявленные в локальной области, без static
, имеют автоматическую продолжительность хранения.
(Некоторые другие случаи существуют для extern
и т. Д., Но здесь это не актуально. Есть термин «связь», который я не буду здесь рассматривать.)
Зная это, тогда «потому что тедва статичны "не имеет смысла.У них статически установленный и фиксированный размер, но это все, что у них общего.
Что касается именования, это субъективно и соответствует вашему собственному стандарту кодирования.Дайте им интуитивно понятные имена, поясняющие, что они содержат, а не то, какого они типа.
Некоторые старые стандарты кодирования предпочитали рассматривать объявленные static
переменные области видимости файлов как частные и поэтому использовали префикс _
для указанияэтот.Но это плохая практика, потому что она вступает в противоречие с правилами именования стандарта C (и стандарта POSIX).