2009-10-09 4 views
0

Fortran PowerStation (4.0)에서 Fortran 11 (2003) 컴파일러로 일부 포트란 코드를 이식했습니다. 이전 컴파일러와 새 컴파일러 사이에 doublereal 값을 유지하려면 properties>fortran>data>"Default Read Kind"을 4에서 8로 변경했습니다. 이제 전역 변수가 한 파일에서 다른 파일로 데이터를 유지 관리하지 않는 것이 문제입니다.기본 실제 종류 이식 문제

abc 변수를 하나의 파일에 전역 변수 (COMMON/test/abc)로 생성한다고 가정합니다. 그것은 한 파일에서 수정되고 다른 파일에서 사용됩니다. 두 번째 파일에있는 abc 변수의 값을 검사 할 때 수정 된 데이터가 포함되어 있지 않은 것으로 판명됩니다. 이것은 "Default Real Kind"을 8로 변경할 때만 발생합니다.

속성 창에서 수정할 필요가있는 다른 옵션이 있습니까?

해결책을주십시오. 미리 감사드립니다.

답변

1

어떤 컴파일러를 사용하고 있는지, 어떤 수정을했는지 등은 잘 모르므로 조금만 주저합니다.

기본 실제 종류를 4에서 8로 변경한다고 생각하는대로 값을 유지한다는 것은 확실하지 않습니다. 기존 컴파일러의 실수 (kind = 4)가 새 컴파일러의 실수 (kind = 8)와 동일하다고 생각하는 것 같습니다. 이것은 사실 일지 모르지만, 그것은 나에게있을 법하지 않습니다.

그러나 실수 (kind = 4)가 4 바이트 IEEE 호환 부동 소수점 수를 의미해야하거나 실제 (kind = 8)가 8 바이트 IEEE를 의미해야한다는 생각의 함정에 빠지지 마십시오 fp 번호. 이것은 대부분의 컴파일러에서 그렇습니다. 확실히 최근에 사용한 모든 컴파일러에서 그렇지만 Fortran 표준에서는 필요하지 않습니다. 이전 컴파일러는 새로운 컴파일러의 의미와 다른 의미를 가질 수 있습니다.

마지막으로 Fortran 프로그램에서 실수 크기를 변경하면 공통 블록에 문제가 발생합니다. 가장 좋은 해결책은 공통 블록을 모듈 변수로 대체하는 것입니다. 그렇게 할 수 없다면 공통 선언은 메모리에서 변수를 레이아웃하는 방법에 대한 컴파일러의 지침이라는 점을 명심해야합니다. 공통 블록의 한 선언에서 변수의 크기를 변경하지만 다른 블록에서는 변수의 크기를 변경하지 않으면 문제가 발생합니다.

감사

마크