2014-06-25 4 views
2

Fortran 표준이 발전하고 새로운 내장 변수가 도입됨에 따라 컴파일러는 잠시 후이를 선택합니다. 한 예는 변수 C_PTRDIFF_T입니다.내장 변수가 정의되어 있는지 확인

는 이미 예를 들어,

program test 
    USE ISO_C_BINDING 
    Integer, Parameter :: C_PTRDIFF_T = 12 
end program 

가 어떻게에서이 휴대 할 수 컴파일러 자체가 정의되지 않은 경우 나 고유 변수를 정의하고 싶습니다뿐만 아니라 오래된 컴파일러 내 코드를 컴파일 가능한을 만들려면 컴파일러?

답변

2

한번에 컴파일 및 유사 뭔가 실행 :

USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_PTRDIFF_T 
IF (C_PTRDIFF_T >= 0) THEN 
    PRINT "('Ok')" 
ELSE 
    PRINT "('Not ok')" 
END IF 
END 

컴파일 suceeds 경우, 컴파일러는 C_PTRDIFF_T을 지원하는 표준의 인식을.

프로그램을 실행 한 다음 Ok를 인쇄하면 (C_PTRDIFF_T 상수 값이 음수가 아님) 프로세서는 관련 C 유형과 상호 운용되는 정수도 지원합니다.

이 테스트에 따라 ISO_C_BINDING의 독립 실행 형 정의를 제공하거나 C_PTRDIFF_T를 전달하는 모듈에 대해 약간 다른 소스 코드를 선택하여 프로그램을 적절하게 구성 할 수 있습니다.

이후 표준에서 내장 모듈에 새 엔티티를 추가 할 수있는 기능을 사용하면 내장 모듈에 항상 USE 문에 ONL 절을 항상 사용하는 프로그래밍 스타일을 사용하는 것이 좋습니다.

(참고 C_PTRDIFF_T는 가변도 극한없고, 극한 모듈의 정수이다.)

+0

정의되지 않은 변수는 쉽게인지 코드 실패 메이커. 내가 동일한 코드베이스에서 모든 컴파일러를 지원하는 방법을 찾고 있어요. 나는 원래 게시물에서 이것을 분명히했다. –

+0

마지막 "진정한"포트란 소스에서 - 할 수 없습니다. 어떤 방법 으로든 최종 포트란 소스를 변경해야합니다. 빌드 환경에 따라 대답에 설명 된대로 대체 소스 파일을 선택할 수 있습니다 (아마도 작은 테스트 프로그램이 실제 중간 모듈을 작성합니다. 종류 선택을 위해 자주 볼 수 있습니다). 또는 전 처리기를 사용할 수도 있습니다. 다른 명백한 대답은 모든 컴파일러가 해당 표준을 지원할 때까지 ISO_C_BINDING에서 C_PTRDIFF_T를 사용하지 않는 것입니다. – IanH