2014-05-16 2 views
0

내 서브 루틴에서 배열을 정의한 다음 항목이 작성되기 전에 숫자로 채 웁니다. 내 프로그램에서 나는 또한 항목 앞에 서브 루틴을 호출합니다. 내 항목에서 나는이 배열을 사용하지만 서브 루틴에서는 0이 아니지만 엔트리에서는 0으로 돌아 간다.서브 루틴에서 정의 된 변수는 (서브 루틴 내에서) 엔트리로 이어집니다.

 SRL(1)=SRW+4 
     DO 10 I=2,NLAY 
10 SRL(I)=SRL(I-1)+MLAY(I-1)+1 
     LAST=SRL(NLAY)+MLAY(NLAY) 
     SRW=LAST 
     RETURN 

     ENTRY STLOAD(NUMG,M,L,S,T,SS,TS,W,TAU) 
     N=SRL(L)+M-1 
     READ(10,REC=N) W1,TAU1,S1,T1,SS1,TS1 

이것은 내가 내 레코드 번호는 긍정적 아니다라고 때문에, 문제가 발생하고있어 어디 :

내 모든 코드를 복사하지 않고

, 이것은 관련이 서브 루틴의 섹션 내가 SRL(1) (이 경우 L1)이라고 쓰는 것은 제로라고 말하지만, 무엇을 쓸 때 엔트리 위의 코드 블록에 SRL(1)이 무엇입니까? 5입니다.

변수 SRL(L)은 서브 루틴 시작시 선언됩니다.

+0

디버거를 사용합니까? – Peter

+0

저는 디버거입니다. @Peter – user3629603

+1

나는 이것을 후회할 것임을 알지만,''SRL'에'save' 속성을 설정 했습니까? (힌트 :'entry'는 사용하지 말고'save'는 사용하지 마십시오.) –

답변

3

설명에서 언급했듯이 SRL 배열에는 save 특성이 없을 수 있습니다. 그러나 해당 코드의 수명을 고려하여 사용 된 컴파일러가 기본적으로 변수를 저장했거나 특정 컴파일 옵션이 사용되었을 수 있습니다.

이것이 어떤 방식 으로든 문서화되기를 희망하는 것이 너무 많습니다. gfortran에 대한 -fno-automatic 또는 ifort에 대한 -save. 나는 다른 컴파일러가 그런 옵션을 설정할 수 있다고 생각하고있다.

+0

코드에서 실제로'save'를 지정하는 것이 가장 좋습니다. (물론 다른 것들이'save'd 될 필요가 있는지보기 위해 코드를 연구 할 필요가 있습니다.) – agentp

관련 문제