Volatile COMMON 블록

Volatile COMMON 블록

전역 변수를 공유하는 여러 컴파일러 중에서는 COMMON 블록에 VOLATILE 속성을 붙일 수 있게 허용한 곳도 있었어요. 그런데 이건 표준 포트란 문법이 아니에요. gfortran에서 어떻게 처리되는지, 그리고 실제 동작은 어떤지 함께 살펴볼게요.

출처: Volatile COMMON blocks

본문

일부 Fortran 컴파일러(예: g77)는 사용자가 COMMONVOLATILE 속성으로 선언하는 것을 허용했어요. g77에서 이런 선언은 해당 공용 블록의 값이 외부에서도 바뀔 수 있다는 사실을 컴파일러에 알려 주는 용도로 쓰였죠.

하지만 이 문법은 표준 Fortran 문법이 아니에요. 그래서 gfortran은 VOLATILECOMMON 블록 전체에 붙이는 문법을 지원하지 않아요.

주의 깊게 봐야 할 부분이 있어요. gfortran은 4.3 개정판부터 COMMON 블록 안의 개별 변수VOLATILE 속성을 붙이는 것은 받아들여요. 다시 말해 블록 전체가 아니라, 블록 안에 있는 개별 변수 단위로 VOLATILE을 표시할 수 있다는 뜻이에요.

즉, 블록 전체에 VOLATILE을 선언하는 비표준 문법은 거부되지만, 같은 효과를 변수 단위로 달성할 수는 있어요. 옛 코드를 gfortran으로 옮길 때는 "블록 전체에 붙이던 VOLATILE을 변수 각각에 옮겨 달아야 한다"는 점을 기억하면 좋아요.

왜 이렇게 나뉘는지도 잠깐 짚어 볼게요. VOLATILE은 원래 개별 변수의 값이 프로그램이 예상하지 못한 시점에 바뀔 수 있음을 뜻해요. g77 같은 컴파일러는 편의상 블록 전체에 한 번에 붙이는 걸 허용했지만, 표준 문법으로는 속성이 변수 선언에 붙는 것이므로 블록 단위 표기가 표준에 없어요. 그래서 gfortran은 개별 변수에 붙이는 표준 형태는 살리고, 블록 전체 문법만 비표준으로 처리한 거예요.

더 알아보기

  • VOLATILE 속성 자체는 표준 Fortran의 일부이며, 주로 인터럽트 핸들러나 공유 메모리 환경에서 값이 예기치 않게 바뀔 수 있음을 알릴 때 사용해요.
  • 이 항목은 "Extensions not implemented in GNU Fortran" 절에 속해 있어요. 즉 gfortran이 지원하지 않는 확장을 정리한 곳이에요.
  • COMMON 블록과 관련된 다른 확장 항목들과 함께 보면 옛 소스 호환에 도움이 돼요.