This page is also available in 3 other languages

static

[Variable Scope & Qualifiers]

설명

static 키워드는 오직 한 함수에서만 볼 수 있는 변수를 만들 때 쓴다. 그러나 함수가 불릴 때마다 만들어졌다 사라지는 지역 변수와 달리 static 변수는 함수 호출을 넘어 계속되며, 함수 호출 사이에 자료를 보존한다.

static 으로 선언된 변수는 함수가 처음 불릴 때 한 번만 만들어지고 초기화된다.

예제 코드

/* RandomWalk
  Paul Badger 2007
  RandomWalk wanders up and down randomly between two
  endpoints. The maximum move in one loop is governed by
  the parameter "stepsize".
  A static variable is moved up and down a random amount.
  This technique is also known as "pink noise" and "drunken walk".
*/

#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;

int thisTime;
int total;

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;  // variable to store value in random walk - static 으로 선언되어서
  // 다른 함수가 그 값을 바꿀 수 없음

  place = place + (random(-moveSize, moveSize + 1));

  if (place < randomWalkLowRange) {                             // 위와 아래 한계 체크
    place = randomWalkLowRange + (randomWalkLowRange - place);  // 양의 방향에서 뒤로 가는 것을 반영
  }
  else if (place > randomWalkHighRange) {
    place = randomWalkHighRange - (place - randomWalkHighRange);  // 양의 방향에서 뒤로 가는 것을 반영
  }

  return place;
}

더 볼 것