대체 복소수 함수 문법
대체 복소수 함수 문법 (Alternate complex function syntax)
복소수 함수를 선언하는 두 가지 비표준 문법 중에서, gfortran이 어느 쪽까지 받아들이고 어느 쪽은 거부하는지 정리해요. 옛 코드를 이식할 때 자주 부딪히는 부분이라 미리 알아두면 좋아요.
본문
g77를 포함한 일부 포트란 컴파일러는 복소수 함수를 COMPLEX FUNCTION name*16() 문법으로 선언하도록 허용해요. 동시에 COMPLEX*16 FUNCTION name()처럼 쓰는 방식도 있어요. 둘 다 비표준 레거시 확장이에요.
gfortran은 이 두 형태 중 더 흔한 후자(COMPLEX*16 FUNCTION name())는 그대로 받아들이지만, 전자(COMPLEX FUNCTION name*16())는 받아들이지 않아요.
구체적으로 말하면, 함수 이름에 크기를 덧붙이는 name*16 형태는 거부하고, 타입·크기를 합쳐 COMPLEX*16라고 앞에 쓰는 형태는 지원해요. 두 형태가 표현하려는 건 사실 같은 선언이에요.
COMPLEX*16은 16바이트 복소수, 즉 두 배 정밀도(double precision) 복소수를 뜻하는 옛 표기예요. 같은 의미를 현대 표준 문법으로 쓰면 이렇게 돼요.
! 레거시 표기 (gfortran이 지원하는 쪽)
COMPLEX*16 FUNCTION cf(a, b)
...
! 같은 의미의 표준 표기 (권장)
COMPLEX(KIND=8) FUNCTION cf(a, b)
...
새 코드를 작성한다면 레거시 확장보다는 표준에 가까운 COMPLEX(KIND=8)나 COMPLEX(8) 표기를 쓰는 게 좋아요. 이 대체 문법은 어디까지나 g77과의 하위 호환을 위해 남아 있는 기능이니까요. 다만 기존의 옛 코드를 그대로 컴파일해야 할 때는 COMPLEX*16 FUNCTION 형태가 읽힌다는 점만 기억해 두면 돼요.
더 알아보기
- GNU Fortran 확장 문법 전체 목록
- g77과의 하위 호환성
- 복소수 타입 선언과 KIND·크기 지정