OneDev

[C] volatile 키워드 본문

Language/C

[C] volatile 키워드

one_dev 2023. 8. 14. 14:10

◎ volatile 키워드

  • 해당 변수를 최적화에서 제외 하도록 명령하는 키워드
  • 외부 하드웨어와 통신할 때 주로 사용된다
  • "volatile" 이란 단어는 "변덕스러운" 이라는 의미를 가지고 있는데, 변덕스럽게 변할 수 있는 값들에 대해 최적화 작업을 수행하지 말라고 컴파일러에게 명령한다고 생각하면 이해가 쉬울듯 하다

 

◎ syntax

volatile 키워드 사용을 위한 구문은 매우 간단한데, 변수 앞에 volatile 키워드를 붙여주기만 하면 된다

 

<< 예시 >>

#include <stdio.h>
typedef struct SENSOR {
  /* 감지 안되면 0, 감지되면 1 이다.*/
  int sensor_flag;
  int data;
} SENSOR;

int main() {
  volatile SENSOR *sensor;  // 컴파일러는 더이상 sensor에 대한 최적화 수행 X

  while (!(sensor->sensor_flag)) {
  }
  printf("Data : %d \n", sensor->data);
}

 

◎ volatile 키워드는 언제 쓰는지?

→ 컴파일러는 매우 똑똑해서, 우리가 작성한 소스코드를 우리의 의도와 다르게 바꿀(최적화) 가능성이 있다

→ 이런 경우 컴파일러에서 최적화를 사용하지 않는 쪽으로 옵션을 바꾸는 것이 1차 해결법이 될 수 있다

(Visual Studio → 프로젝트 속성 > C/C++ > 최적화 에서 "사용 안함" 선택)

→ 최적화 옵션을 끄는 순간 다른 모든 코드들도 최적화를 하지 않겠다는 의미가 되기 때문에 큰 손실이 발생할 수 있다

→ 이에 소스코드의 특정 부분에만 최적화 하지 않도록 하고싶을 때 volatile 키워드를 사용한다

Comments