- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- static
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
static
Описание
Ключевое слово static используется для создания переменных, которые видны только одной функции. Однако в отличие от локальных переменных, которые создаются и уничтожаются каждый раз при вызове функции, переменные static сохраняются за пределами вызова функции, сохраняя свои данные между вызовами функций.
Переменные, объявленные как static, будут созданы и инициализированы только при первом вызове функции.
Пример
/* RandomWalk
Paul Badger 2007
RandomWalk случайным образом блуждает вверх и вниз между двумя
конечные точками. Максимальный значение в одной петле определяется
параметром 'stepize'.
Статическая переменная перемещается вверх и вниз на случайную величину.
Этот прием также известен как «розовый шум».
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
void setup() {
Serial.begin(9600);
}
void loop() {
// test randomWalk function
stepsize = 5;
thisTime = randomWalk(stepsize);
Serial.println(thisTime);
delay(10);
}
int randomWalk(int moveSize) {
static int place; // переменная для хранения величины случайного перемещения - объявлена как static
// поэтому сохраняет свое значение между вызовами функции. При этом другие функции не могут ее изменить
place = place + (random(-moveSize, moveSize + 1));
if (place < randomWalkLowRange) { // проверка нижнего и верхнего пределов
place = randomWalkLowRange + (randomWalkLowRange - place); // если меньше, то увеличиваем
}
else if (place > randomWalkHighRange) {
place = randomWalkHighRange - (place - randomWalkHighRange); // если больше, то уменьшаем
}
return place;
}