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

Материал из ВикиСправочника
Перейти к: навигация, поиск

{{#setlogo:ArduinoCommunityLogo.png}}

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


static

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

Пример

  1. /* RandomWalk
  2. * Paul Badger 2007
  3. * RandomWalk ("Случайное блуждание") программа "перемещается" между двумя точками последовательности
  4. * Максимальное перемещение задается параметром "stepsize".
  5. * Static переменная изменяет свое значение на случайную велечину.
  6. * Такое "блуждание" иногда называют "pink noise" (розовый шум).
  7. */
  8.  
  9. #define randomWalkLowRange -20
  10. #define randomWalkHighRange 20
  11. int stepsize;
  12.  
  13. int thisTime;
  14. int total;
  15.  
  16. void setup()
  17. {
  18.   Serial.begin(9600);
  19. }
  20.  
  21. void loop()
  22. {      
  23.   stepsize = 5;
  24.   thisTime = randomWalk(stepsize);
  25.   Serial.println(thisTime);
  26.    delay(10);
  27. }
  28.  
  29. int randomWalk(int moveSize){
  30.   static int  place;     // переменная сохраняет значение между вызовами функции
  31.                          // другие функции не могут изменять значение этой переменной
  32.   place = place + (random(-moveSize, moveSize + 1));
  33.  
  34.   if (place < randomWalkLowRange){                    // проверяем выхождение за границы
  35.     place = place + (randomWalkLowRange - place);     // если "выскочили" то делаем разворот
  36.                                                       // этот пример взят с arduino.cc, вообще? если раскрыть скобки,
  37.                                                       // то получим просто place = randomWalkLowRange;
  38.   }
  39.   else if(place > randomWalkHighRange){
  40.     place = place - (place - randomWalkHighRange);     // разворот
  41.   }
  42.  
  43.   return place;
  44. }

См.также

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