Fortran에서 C 프로토타입 생성하기

Fortran에서 C 프로토타입 생성하기

Fortran 소스에서 C 호출 규약(BIND(C))을 쓰는 개체들의 C 선언·함수 프로토타입을 컴파일러가 자동으로 뽑아내는 방법을 설명하는 짧은 문서예요. 컴파일러 옵션 두 개만 알면 C 쪽 헤더를 손으로 쓰지 않아도 되는 유용한 기능이에요.

출처: Generating C prototypes from Fortran (The GNU Fortran Compiler)

본문

-fc-prototypes 옵션을 쓰면 BIND(C)로 표시된 개체들에 대한 C 선언과 함수 프로토타입을 출력할 수 있어요. 외부 프로시저에 대한 프로토타입을 뽑으려면 -fc-prototypes-external 옵션을 쓰면 되는데, 이에 대한 자세한 내용은 다른 언어와의 상호운용 옵션에서 확인할 수 있어요.

한 가지 짚고 갈 점은 표준 Fortran이 C의 unsigned 정수 타입에 대응하는 상호운용 타입을 규정하지 않는다는 거예요. unsigned 타입과의 상호운용을 위해 GNU Fortran은 unsigned 정수를 제공하며, 이 내용은 Unsigned integers에서 다뤄요.

더 알아보기

  • -fc-prototypesBIND(C) 개체용, -fc-prototypes-external은 외부 프로시저용으로 각각 쓰임새가 달라요.
  • C의 unsigned 타입과 맞추려면 GNU Fortran의 unsigned 정수 확장을 사용해야 해요.
  • 생성된 프로토타입은 C 쪽 헤더 파일로 저장해 두면 Fortran과 C를 함께 링크하는 프로젝트에서 인터페이스 불일치를 줄여줘요.
  • 이 옵션은 컴파일(-c) 시점이 아니라 선언만 출력한다는 점을 활용해, 빌드 단계에서 헤더를 자동 생성하는 흐름에 끼워 넣기 좋아요.
  • BIND(C)로 선언한 함수·루틴이 많아질수록 C 쪽에서 맞춰 줘야 할 시그니처가 덜 틀리게 해주는 실용적인 도구예요.
  • 생성 규칙이 명확해 팀 내에서 Fortran 쪽 인터페이스를 바꿀 때마다 헤더를 재생성해 두면, 양쪽 언어의 시그니처가 어긋나 생기는 버그를 원천적으로 줄일 수 있어요.