실수 배열 첨자
실수 배열 첨자 (Real array indices)
배열 첨자(index)로 정수뿐 아니라 실수(REAL) 표현식이나 변수를 허용하는 GNU Fortran의 확장 기능을 소개해요. 표준 Fortran에서는 볼 수 없는 동작이고, 정수 첨자로 변환하는 과정이 내부적으로 어떻게 처리되는지 이해하면 이식할 때 도움이 돼요.
본문
확장 기능으로서, GNU Fortran은 배열 첨자로 REAL 표현식이나 변수를 사용하는 것을 허용해요.
표준 Fortran에서는 배열 첨자가 반드시 정수형이어야 해요. 그런데 일부 오래된 코드는 A(I) 같은 형태에서 I를 실수 변수로 선언해 두고 쓰는 경우가 있었어요. GNU Fortran은 이런 비표준 코드를 받아들이기 위해 실수 첨자를 허용하는 확장을 제공해요.
이 확장을 켜면 컴파일러가 실수 첨자 값을 처리할 때, 부동소수점 값이 갖는 소수부를 정수로 변환하는 방식(예를 들어 실수를 정수형으로 변환하는 내재적 변환 규칙)을 따르게 돼요. 즉 1.9 같은 값이 첨자로 쓰이면 단순히 잘라내는(truncation) 방식으로 정수 첨자로 바뀌는 식이에요. 원래 코드가 어떤 의미를 의도했는지에 따라 결과가 달라질 수 있으니, 새로 작성하는 코드에서는 정수 첨자를 쓰는 것이 표준에 맞는 안전한 선택이에요.
배열의 상한·하한을 벗어나는 실수 첨자가 쓰이면, 일반 배열 접근과 마찬가지로 경계 검사(bounds check)가 켜져 있다면 런타임 오류로 잡힐 수 있어요. 이 확장은 다른 컴파일러로 이식할 때는 지원되지 않을 수 있다는 점도 염두에 두면 좋아요.
더 알아보기
- Extensions implemented in GNU Fortran — gfortran이 구현한 확장 전체 목록
- Unary operators — 단항 연산자 확장
- Bounds checking (-fcheck=bounds) — 배열 경계 검사 옵션