2010-08-19 7 views
2

Fortran 라이브러리 CUBPACK의 서브 루틴 Rule_Tn에는 통합 벡터 기능을 설명하는 매개 변수 Integrand이 필요합니다. 내가 바로 위의이 인터페이스에 일치하는 C에서 함수 타입을 정의 할 필요가 C 코드에서 Rule_Tn 전화를 원하기 때문에 그것은Fortran은 어떻게 배열을 반환합니까?

INTERFACE 
    FUNCTION Integrand(NF,X) RESULT(Value) 
     USE Precision_Model 
     INTEGER,      INTENT(IN) :: NF 
     REAL(KIND=STND), DIMENSION(:), INTENT(IN) :: X 
     REAL(KIND=STND), DIMENSION(NF)    :: Value 
    END FUNCTION Integrand 
END INTERFACE 

입니다. 따라서 Fortran 함수가 배열을 반환하는 방법을 알아 냈습니다. 처음에 다음 C 서명을 가정했습니다.

void Integrand(double* value, const int* nf, const int* x); 

위의 인터페이스와 일치합니다. 그러나 아주 틀린! 나는 세그 폴트가있어. 그리고 이미 double이 REAL(KIND=STND)에 해당하는 유형이고, STND이 모듈 Precision_Model에서 나온다고 테스트했습니다.

이제 누가 올바른 서명을 말해 줄 수 있습니까? GNU Fortran과 C 컴파일러를 사용하고 있습니다.

답변

1

GNU docs을 참조하십시오. Fortran과 C 사이에 다른 순서로 인수를 제공 한 것처럼 보입니다. value을 C 프로토 타입에 마지막으로 넣으십시오.

또한 FUNCTION 행에 bind(C)이 누락되었습니다.

+0

'STND'의 값은'Precision_Model '모듈에 정의되어 있고'REAL (KIND = STND)'는'double'에 해당합니다. 질문 :이 인터페이스에 해당하는 C 서명은 무엇입니까? – phlipsy

+2

@phlipsy : "제공 한"말씨를 바꿀 수도 있습니다. 답변을 업데이트 중입니다. – Potatoswatter

+0

나는 그 질문에 대한 부분을 다시 말했습니다. – phlipsy

관련 문제