Fortran90에서 문자열을 구문 분석하기 위해 여기 에 설명 된 구문 분석 루틴 을 사용하려고합니다 . 문서의 링크를 따라 가면 두 개의 f90 파일이있는 .zip 파일을 다운로드 할 수 있습니다 . 그런 다음 그들을 컴파일했습니다 gfortran -c precmod.f90 && gfortran -c stringmod.f90
. use strings
내 프로그램 에도 추가 했습니다.
그럼에도 불구하고 컴파일 할 때 다음과 같은 오류가 발생합니다 ( gfortran stringmod.o precmod.o calcs.o server.o
).
calcs.o: In function `calculate_':
calcs.f90:(.text+0x174): undefined reference to `parse_'
collect2: error: ld returned exit status 1
calcs.f90은 아래에 표시되고 server.o는 calcs에 의해 호출되어야하는 C로 작성된 서버입니다.
program name
use strings
use iso_c_binding, only: C_CHAR, C_NULL_CHAR, C_INT
implicit none
! type declaration statements
character(255) query
integer calc, ans, portnum, calculate
interface
subroutine server(portnum) bind(C, name="server")
use iso_c_binding, only: c_int
integer(kind=c_int), value :: portnum
end subroutine server
end interface
! executable statements
print *, "Please provide me with a port number. Plz. <3"
read "(1i9)", portnum
call server(portnum)
end program name
function calculate(query)
implicit none
character(255) query, op
integer length, i, calculate
integer, dimension (:,:), allocatable :: inputarray
call parse(query, ' ', inputarray, length)
do i=1,size(inputarray)
print *, inputarray(i, 1)
end do
calculate = 5
end function calculate
나는 public
stringmod.f90의 상단에 추가하려고했습니다 .
우리가 뭔가를 가질 때
program
end program
function func()
end function
이 함수 func
는 주 프로그램과 동일한 소스 코드 파일에서 제공되는 경우에도 외부 함수 입니다. 이 외부 기능은 주 프로그램에 대해 전혀 알지 못하므로 주 프로그램은 외부 기능에 대해 거의 알지 못합니다.
이러한 지식 부족의 일부는 질문의 예에서 서브 루틴 parse
이 메인 프로그램에서 명시 적 인터페이스 (모듈을 통해)를 가지고 있다는 사실이 calculate
.
즉, 함수 calculate
에는 자체 범위가 있고 호스트가 없습니다. 모듈 프로 시저에 액세스하려면 모듈 parse
자체를 사용할 수 있습니다 strings
.
function calculate(query)
use strings, only : parse
implicit none
end function
.NET parse
의 모듈 프로 시저 라는 인식 부족에 대한 힌트가 있습니다 strings
. parse_
(단일 후행 밑줄) 의 이름 장식 은 외부 절차를 엉망으로 만드는 일반적인 방법입니다. 모듈 프로 시저 (없음 bind(c)
)는 일반적으로 훨씬 더 정교한 기호 이름을 갖습니다.
마지막으로 댓글에서 무언가를 반복하겠습니다. 앞서 메인 프로그램은 외부 기능에 대해 거의 모른다고 말했습니다. 메인 프로그램에는 다음과 같은 선언이 있습니다.
integer ... calculate
이는 외부 함수 calculate
(암시 적 인터페이스가 있음)에 정수 반환 유형이 있음을 나타냅니다. 이 경우 함수는 대신 내부 함수로 만들 수 있습니다.
program
use strings, only : parse
contains
integer function calculate
end function
end program
함수 calculate
는 명시 적 인터페이스 (메인 프로그램에서 반환 선언의 필요성 제거)를 가질뿐만 아니라 parse
호스트 연결 을 통해 액세스 할 수도 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다