static
Описание
Ключевое слово
static
используется для создания переменных, которые видны только одной функции. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные сохраняются после вызова функции, сохраняя свои данные между вызовами функции.
Переменные, объявленные как static, будут создаваться и инициализироваться только при первом вызове функции.
Пример кода
/* RandomWalk
Paul Badger 2007
RandomWalk случайно блуждает вверх и вниз между двумя
конечными точками. Максимальное движение в одном цикле управляется
параметром "stepsize".
Статическая переменная перемещается вверх и вниз на случайную величину.
Эта техника также известна как "розовый шум" и "пьяная походка".
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
void setup() {
Serial.begin(9600);
}
void loop() {
// тестируем функцию randomWalk
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;
}