카운트 필드가 없는 `X` 포맷 설명자

카운트 필드가 없는 X 포맷 설명자

옛날 포트란 코드를 보면 FORMAT(I1, X, I1)처럼 X 설명자에 숫자가 붙지 않은 채로 쓰인 걸 볼 수 있어요. 표준 문법에서는 X 앞에 몇 칸을 띌지 지정해야 하는데, 옛 코드에서는 그걸 생략하기도 했죠. GNU Fortran이 이 레거시 코드를 어떻게 지원하는지 함께 살펴볼게요.

출처: X format descriptor without count field

본문

레거시 코드를 지원하기 위해, GNU Fortran은 FORMAT 문의 X 편집 설명자에서 카운트 필드(count field)를 생략하는 것을 허용해요. 카운트를 생략하면 암묵적으로 그 값이 1로 간주돼요.

예를 들어 다음과 같은 코드를 보면, X 앞에 숫자가 없는 걸 확인할 수 있어요.

       PRINT 10, 2, 3
10     FORMAT (I1, X, I1)

여기서 X는 카운트 없이 쓰였는데, 이는 사실상 1X와 같아요. 즉 2I1로 출력하고, 공백 한 칸을 띄운 뒤, 3I1로 출력하라는 뜻이에요.

표준 문법에서는 X 설명자가 반드시 카운트를 요구하지만, GNU Fortran은 옛 소스와의 호환을 위해 생략을 받아줘요. 생략했을 때 기본값 1이 적용된다는 점만 기억하면, 오래된 코드를 새 컴파일러로 옮길 때 손쉽게 처리할 수 있어요.

이 확장이 특히 유용한 상황을 하나 짚어 볼게요. 옛 소스에는 공백을 한 칸씩 넣기 위해 X를 자주 쓰곤 했어요. 그런 코드가 많다 보니 일일이 1X로 고치는 것보다 생략을 허용해 주는 게 호환성 측면에서 훨씬 편해요. 새로 작성하는 코드라면 굳이 생략할 필요는 없지만, 기존 코드를 그대로 살려 컴파일해야 할 때는 이 기본값 규칙 덕분에 출력이 달라지지 않아요.

한 가지 유의할 점은, 이 생략 규칙이 오로지 X 설명자에만 해당한다는 거예요. I, F, A 같은 다른 설명자는 여전히 카운트를 명시해야 해요. 즉 이 확장은 레거시 X 표기 하나를 위한 특별 규칙으로 이해하는 것이 정확해요.

더 알아보기

  • X 설명자는 공백을 삽입하는 역할을 해요. 카운트 n은 "n칸의 공백"을 의미해요.
  • 이 항목은 "Extensions implemented in GNU Fortran" 절의 하나로, gfortran이 실제로 지원하는 확장이에요.
  • 같은 절 아래에 "Commas in FORMAT specifications"처럼 FORMAT 문법과 관련된 다른 확장 항목도 있어요.