변수 FORMAT 표현식

변수 FORMAT 표현식

포맷 문에서 출력 폭을 상황에 따라 바꾸고 싶을 때가 있었어요. 옛 Fortran에는 각괄호로 표현식을 감싸는 FORMAT(I<N>) 같은 문법이 있었는데, 이건 레거시 확장이에요. GNU Fortran이 어떻게 다루는지, 그리고 표준적인 대안은 무엇인지 함께 볼게요.

출처: Variable FORMAT expressions

본문

변수 FORMAT 표현식은 포맷 문장 안에 Fortran 표현식을 각괄호(< >)로 감싸 넣는 방식이에요. 예를 들어 FORMAT(I<N>)처럼 쓰면, N의 값에 따라 출력 폭을 조정하려는 의도예요. GNU Fortran은 이 레거시 확장을 지원하지 않아요.

그렇다면 같은 효과를 얻으려면 어떻게 해야 할까요? 더 강력하고 표준적인 방법인 내부 출력(internal output)과 문자열 포맷의 조합으로 재현할 수 있어요.

예를 들어, 다음과 같은 코드 조각이 있었다고 해 볼게요.

c     Variable declaration
      CHARACTER(LEN=20) FMT
c
c     Other code here...
c
      WRITE(FMT,*) N+1
      WRITE(6,"(I" // ADJUSTL(FMT) // ")") INT1

여기서 아이디어는 이래요. 먼저 WRITE(FMT,*) N+1N+1 값을 문자열 변수 FMT에 내보내고, 그 다음 포맷 문자열을 문자열 결합(//)으로 조립해 WRITE(6, ...)에 넘기는 거예요. 즉 I<N>을 직접 지원하는 대신, 폭 숫자를 문자열로 만든 뒤 그 문자열을 포맷으로 사용하는 방식이에요.

변수 포맷을 써야 하는 순간이 오면, 각괄호 확장을 기대하기보다 이렇게 문자열 조합으로 풀어내는 것이 GNU Fortran에서는 자연스러운 방법이에요. 표준 문법 안에서 충분히 해결되니까요.

더 알아보기

  • 변수 FORMAT 표현식은 "Extensions not implemented in GNU Fortran" 절에 포함되어 있어요.
  • 이와 반대로, GNU Fortran이 실제로 구현한 확장들은 "Extensions implemented in GNU Fortran" 절에 정리돼 있어요.
  • 문자열 포맷과 내부 파일 I/O에 대한 자세한 내용은 Fortran 표준의 WRITE·FORMAT 문을 함께 보면 좋아요.