Arduino:Справочник языка Arduino/Область видимости переменных и квалификаторы/static

Материал из Онлайн справочника
Версия от 00:44, 14 декабря 2016; Myagkij (обсуждение | вклад) (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

{{#setlogo:ArduinoCommunityLogo.png}}

Проверка/Оформление/Редактирование: Мякишев Е.А.


static

Ключевое слово static используется для создания переменной, которая видна только одной функции. Однако в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные остаются после вызова функции, сохраняя свои значения между её вызовами.

Пример

/* RandomWalk
* Paul Badger 2007
* RandomWalk ("Случайное блуждание") программа "перемещается" между двумя точками последовательности
* Максимальное перемещение задается параметром "stepsize".
* Static переменная изменяет свое значение на случайную велечину.
* Такое "блуждание" иногда называют "pink noise" (розовый шум).
*/
 
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
 
int thisTime;
int total;
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{      
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
   delay(10);
}
 
int randomWalk(int moveSize){
  static int  place;     // переменная сохраняет значение между вызовами функции
                         // другие функции не могут изменять значение этой переменной
  place = place + (random(-moveSize, moveSize + 1));
 
  if (place < randomWalkLowRange){                    // проверяем выхождение за границы
    place = place + (randomWalkLowRange - place);     // если "выскочили" то делаем разворот
                                                      // этот пример взят с arduino.cc, вообще? если раскрыть скобки, 
                                                      // то получим просто place = randomWalkLowRange;
  }
  else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // разворот
  }
 
  return place;
}

См.также

Внешние ссылки