레거시 PARAMETER 문
레거시 PARAMETER 문 (Legacy PARAMETER statements)
PARAMETER 문은 원래 괄호를 동반하는 표준 문법이에요. 하지만 아주 오래된 코드에서는 괄호 없이 쓰는 형태가 남아 있는 경우가 있어요. gfortran이 이런 옛 형식을 어느 수준까지 받아들이는지 정리해요.
본문
호환성을 위해 GNU Fortran은 괄호 없는 레거시 PARAMETER 문을 -std=legacy와 함께 쓰면 지원해요. -std=gnu로 쓰면 경고(warning)가 나오고, -std=f95 같은 진짜 표준 플래그를 쓰면 오류로 처리돼요.
이런 문장의 형태는 다음과 같아요.
implicit real (E)
parameter e = 2.718282
real c
parameter c = 3.0e8
핵심은 이 문장이 표준을 벗어난 비준수(non-conforming) 코드라는 점이에요. 그래서 gfortran도 기본 모드에서는 경고 이상을 내보내요. 오래된 소스를 그대로 컴파일해야 할 때만 -std=legacy를 써서 이 형식을 통과시키는 게 자연스러운 사용법이에요.
위 예시를 하나씩 읽어 보면 흐름이 보여요. 먼저 implicit real (E)로 E로 시작하는 이름은 기본적으로 실수로 취급되게 하고, 그다음 괄호 없이 parameter e = 2.718282로 자연상수 근삿값을 정의해요. real c로 c를 실수로 선언한 뒤 parameter c = 3.0e8로 빛의 속도를 넣어 두는 패턴이에요. 이처럼 괄호 없이 이름 하나와 값만 적는 것이 레거시 문법의 특징이에요.
새 코드를 작성하거나 기존 코드를 정리할 수 있는 상황이라면, 괄호를 갖춘 표준 PARAMETER 문으로 바꿔 주는 게 좋아요. 표준 문법에서는 PARAMETER (name = value)처럼 이름과 값을 괄호로 묶어요. 예를 들어 parameter e = 2.718282는 parameter (e = 2.718282) 형태로 쓰는 게 표준에 부합해요.
한 가지 기억할 점은, 레거시 형태는 어디까지나 옛 코드 이식용으로 남겨 둔 확장이라는 거예요. -std=legacy가 아니면 컴파일이 거부되거나 경고가 나오니, 표준 모드로 프로젝트를 유지한다면 괄호 있는 표기로 통일하는 습관이 좋아요.
더 알아보기
-std=legacy옵션의 동작 범위와 영향- GNU Fortran에서 지원하는 다른 레거시 확장들
- 표준
PARAMETER문 문법과implicit선언