FORMAT 명세의 빠진 소수점

FORMAT 명세의 빠진 소수점 (Missing period in FORMAT specifications)

FORMAT 문에서 필드 폭을 F4처럼 적으면 표준 문법으로는 어색해요. 원래는 F4.0처럼 소수점 이하 자릿수를 함께 적어야 하거든요. 그런데 아주 오래된 코드에는 이렇게 소수점이 빠진 채 적힌 서식이 남아 있기도 해요. gfortran이 이를 어떻게 처리하는지 살펴볼게요.

출처: Missing period in FORMAT specifications

본문

레거시 코드를 지원하기 위해 GNU Fortran은 -std=legacy가 커맨드 라인에 주어졌을 때에만, 서식 명세에서 소수점(period)이 빠진 표현을 허용해요. 이는 비준수(non-conforming) 코드로 간주되며 권장되지 않아요.

       REAL :: value
       READ(*,10) value
10     FORMAT ('F4')

위 예시에서 FORMAT ('F4')F4가 바로 소수점이 빠진 서식이에요. 표준 문법으로는 F 뒤에 전체 폭과 소수점 이하 자릿수를 .으로 구분해 명시해야 하는데, 여기서는 폭 4만 쓰고 소수점 이하를 생략했죠.

이 확장이 허용되는 조건이 "오직 -std=legacy일 때"라는 점이 중요해요. 즉 그 외의 표준 모드에서는 이 코드가 오류로 잡혀요. 표준을 엄격히 지키는 프로젝트라면 소스에서 이런 서식을 표준 문법으로 고쳐 주는 게 좋아요. 예를 들어 폭 4, 소수점 이하 0자리가 의도였다면 F4.0처럼 적으면 표준에 부합해요.

이 항목이 왜 생겼는지 기억할 점은, 아주 오래된 Fortran 코드(=레거시)를 gfortran으로 가져올 때 이런 세부 문법 차이에서 막히는 경우가 많다는 거예요. -std=legacy는 그런 이식 과정을 돕기 위한 완화(relaxation) 옵션이에요. 다만 편법을 기본으로 삼기보다는, 이식 후에는 표준 문법으로 정리하는 습관이 좋아요.

더 알아보기

  • FORMAT 문과 서술자(descriptor)의 전체 문법
  • -std=legacy를 비롯한 표준 선택 옵션
  • F, G, I 서술자의 기본 폭 규칙