저는이 F77 코드에서 COMMON BLOCKS를 광범위하게 사용하고 있으며 공통 블록은 C 프로그램 (이름 맹 글링 후)에서도 사용됩니다. foo (a, b, ...)가 fortran 코드의 주요 루틴이라면 공통 블록을 foo()에 로컬로 만들어 어쨌든 다음과 같이 할 수 있습니까?Fortran 77에서 공통 블록 변수의 범위를 현지화합니다.
program new_control_routine()
...
call foo(a1,b1,...)
...
call foo(a2,b2,...)
...
end
점은 그 블록이 같은 이름을 가지고, 비록 그들이 독립 일반적인 블록을 갖는 각각 "foo는"여러 통화를하는 것입니다. 내가 아는 유일한 방법은 "foo는"의 두 번째 호출에서 일반적인 블록 및 관련 서브 루틴의 이름을 변경하는 것입니다, 그래서 다른 루틴 "foo1은"이됩니다, 그래서 내가 할 수있는 :
programe new_control_routine()
...
call foo(a1,b1,...)
...
call foo1(a2,b2,...)
을하지만이 확실히 평범한이며, 발생하기 쉬운 오류.
불행히도이 코드는 기존 코드이며 지난 20 년 동안 수행 된 작업을 수행하는 데 많은 선택의 여지가 없습니다. 수백 개의 공통 블록이 있습니다. 그리고 색인 아이디어에 감사드립니다. – taki
@taki - 알 수없는 이유로 변경하지 않으려는 귀하의 코드를 사용하는 다른 사용자가없는 한, 가장 최근의 개정판 (적어도 F90)으로 "업그레이드"할 수없는 이유는 없습니다. 오늘날 보수적 인 견해로도 F77을 주장하는 것은 부당합니다. 또한 많은 사용자가 라이브러리를 최신 버전으로 업그레이드 할 때 환영합니다. 나는 재 작성에 대해 생각하지 않지만, 언어의 새로운 기능의 느린 소개 ... – Rook
@ldigas - 감사합니다. 그것은 결국 여기 사람들이 할 수 있습니다. – taki