Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 변수는 const와 volatile을 동시에 가질 수 있을까?

C++에서 const와 volatile의 동시 사용

네, C++ 변수는 constvolatile을 동시에 가질 수 있습니다. 이 두 한정자를 함께 사용하는 것은 언뜻 모순처럼 보이지만, 실제로는 매우 유용한 상황에서 활용됩니다.

대표적인 사용 사례

const volatile 조합은 주로 다음과 같은 경우에 사용됩니다.

  • 읽기 전용 하드웨어 레지스터: 메모리 매핑된 I/O 영역처럼 하드웨어가 값을 변경하지만 프로그램은 읽기만 하는 경우
  • 다른 스레드나 인터럽트가 변경하는 값: 현재 코드에서는 수정하지 않지만 외부 요인에 의해 언제든 바뀔 수 있는 공유 변수

각 키워드의 의미

volatile은 해당 변수가 현재 실행 중인 스레드 외부의 요인(하드웨어, 인터럽트 서비스 루틴, 다른 스레드 등)에 의해 변경될 수 있음을 컴파일러에게 알려줍니다. 따라서 컴파일러는 이 변수에 대한 접근을 최적화 과정에서 제거하거나 캐시하지 않고, 항상 실제 메모리에서 값을 읽도록 보장합니다.

const는 프로그램이 해당 변수에 값을 쓰지 않겠다는 약속입니다. 즉, const 선언을 사용하는 프로그램 내부에서는 이 변수를 수정할 수 없습니다.

코드 예제

volatile const int status_register = 0x4000;

위 예제에서 status_register는 프로그램 입장에서는 읽기 전용(const)이지만, 하드웨어가 실시간으로 값을 갱신하기 때문에 volatile로 선언하여 최적화로 인한 잘못된 읽기를 방지합니다.

정리

결론적으로 const와 volatile은 서로 모순되지 않습니다. const는 '프로그램이 쓰지 않는다'는 의미이고, volatile은 '외부에서 변경할 수 있다'는 의미이기 때문입니다. 두 한정자를 함께 사용하면 읽기 전용이면서 외부에 의해 갱신되는 변수를 안전하고 정확하게 다룰 수 있습니다.