혼합 언어 프로그래밍
혼합 언어 프로그래밍 (Mixed-Language Programming)
Fortran 코드와 C·C++ 같은 다른 언어로 작성된 코드를 한 프로그램에서 함께 쓰고 싶을 때가 있어요. 이 장은 그런 혼합 언어 상호운용(interoperability)을 다루는 절이에요. 단, 같은 이야기가 "서로 다른 컴파일러로 컴파일한 Fortran 코드끼리 링크"할 때도 그대로 적용돼요.
본문
이 장은 혼합 언어 상호운용에 관한 내용이에요. 하지만 서로 다른 컴파일러로 컴파일한 Fortran 코드를 링크하는 상황에도 그대로 적용돼요. 대부분의 경우 Fortran 2003 이후 표준의 C 바인딩(C Binding) 기능을 쓰는 것만으로 충분해요.
예를 들어 Fortran 코드에 C++ 코드와 C 코드를 함께 섞는 것이 가능해요. 이때는 C++ 쪽에서 인터페이스 함수를 extern "C"로 선언하고, Fortran 쪽에서는 BIND(C)로 선언한 뒤, C와의 상호운용 규칙을 따르면 돼요. 단, C++ 클래스 객체를 Fortran에서 직접 조작하거나 그 반대는 불가능하다는 점을 기억해야 해요. 불투명 포인터(opaque pointer)로 넘겨 주고받는 것만 가능해요.
링크 단계에서 gfortran 명령을 쓰면 Fortran 코드와 비-Fortran 코드를 같은 프로그램에 함께 링크할 수 있어요. 또는 gcc나 g++을 쓰면서 명시적으로 -lgfortran 옵션을 추가해 Fortran 라이브러리와 링크할 수도 있어요.
만약 주 프로그램(main program)이 Fortran이 아니라 C나 다른 언어로 작성되어 있다면, 아래 Non-Fortran Main Program 절을 참고하면 됩니다. 이 장의 하위 절은 이렇게 구성되어 있어요.
- Interoperability with C
- GNU Fortran Compiler Directives
- Non-Fortran Main Program
- Naming and argument-passing conventions
혼합 언어 프로젝트를 처음 시작할 때는 C 바인딩(BIND(C))을 기준으로 잡는 게 안전해요. 이름 규약이나 인자 전달 방식이 명확히 정의되기 때문에, 컴파일러·언어를 넘나드는 프로젝트에서 오류가 날 확률을 크게 줄여 줘요.
더 알아보기
- C와의 상호운용(Interoperability with C)
- Fortran이 아닌 주 프로그램(Non-Fortran Main Program)
- 이름 짓기와 인자 전달 규약