내장 타입

내장 타입 (Intrinsic Types)

C 코드와 Fortran 코드를 연동할 때, 양쪽에서 사용하는 변수의 타입과 종류(kind)가 정확히 같은지 보장하는 게 중요해요. 이 글에서는 C와 Fortran의 기본 타입을 어떻게 맞춰 주는지, ISO_C_BINDING 내장 모듈을 중심으로 살펴볼게요.

출처: Intrinsic Types

본문

ISO_C_BINDING의 이름 상수 사용

C와 Fortran에서 정확히 같은 변수 타입과 종류가 사용되도록 하려면, ISO_C_BINDING 내장 모듈에 정의된 종류 매개변수용 이름 상수(named constants)를 사용해야 해요.

이 모듈에는 C의 특수 문자들이 이스케이프(escape)된 형태를 나타내는 문자 타입의 이름 상수도 들어 있어요. 예를 들어 C의 개행 문자(newline) 같은 것들이죠. 상수 목록은 ISO_C_BINDING 문서에서 확인할 수 있어요.

LOGICAL 타입 주의사항

논리 타입에 대해서는 한 가지 주의할 점이 있어요. Fortran 표준은 C99의 _Bool과 Fortran의 C_Bool 종류의 논리형 사이에서만 상호 운용을 보장해요. 그리고 C99는 true가 값 1, false가 값 0이라고 정의해요.

GNU Fortran에서 다른 정수 값을 LOGICAL(어떤 종류든)에 사용하면 결과가 정의되지 않아요(undefined). 마찬가지로 GCC의 _Bool에 0과 1이 아닌 다른 정수 값을 넘기는 것도 정의되지 않은 동작이에요. 단, 그 정수가 명시적이든 암묵적이든 _Bool로 캐스팅되는 경우는 예외예요.

즉 정리하면, C와 Fortran 사이에서 논리값을 주고받을 때는 C_Bool 종류를 사용하고, 내부적으로는 1(참)과 0(거짓)만 사용하는 것이 안전해요.

더 알아보기