2012-01-06 2 views
0

빠른 질문. I 변수 선언포트란 변수 유형 변환

DIMENSIONS HH(13, 1000) 

I 더 유형이 지정되어 있지 않기 때문에,이 변수가 정수 배열이라고 가정 함께 포트란 서브 루틴을 갖는다.

HH(2,N) = HH(4,N) + W2 

W2 명시 적으로 서브 루틴 선언되지 않으며 인수로 전달됩니다 나중에 프로그램에서 내가 거기에 다음 줄 인 루프를 가지고있다. 나는 그것이 실제 변수로서 기본적으로 타입이라고 가정한다.

위의 명령에서 W2가 HH (4, N)에 추가되기 전에 정수로 변환 된 것 같습니다. 이 올바른지?

정말로 진지한 사과 바랍니다.

+0

코드의 한 부분에 내재적으로 입력 된 변수가 'INTEGER'이고 코드의 다른 부분에있는 다른 내재적으로 입력 된 변수가 'REAL'이라고 생각하는 이유는 무엇입니까? – talonmies

+0

변수 이름이 "I"와 "N"사이의 문자로 시작하는 경우를 제외하고 fortran에서 변수의 기본 유형이 실제라는 것을 읽었습니다. 그리고 나는 바보이기 때문에 HH가 그 범위에 들었고 fortran이 어떻게 가정 된 타입 변환을 처리했는지 궁금해서 C#으로 그것을 복제 할 수있었습니다. 하지만 당신은 내 혼란을 밖으로 정렬 : O) –

답변

2

Fortran 77에서 달리 정의되지 않는 한 I, J, K, L, M 또는 N으로 시작하는 변수는 암시 적으로 INTEGER입니다. 다른 모든 변수는 내재적으로 REAL입니다. 이것은 배열 HH가 REAL임을 의미합니다. 그래서 결과

HH(2,N) = HH(4,N) + W2 

관련된 암시 적 캐스팅과 REAL 될 것입니다.

+0

doh! 당연하지. 내 알파벳을 모르겠다 고 ... 고마워! –

+5

Fortran 2008에서도이 기능이 계속 적용됩니다! 따라서 명시 적으로 변수를 입력하는 것을 잊어 버린 경우 암시 적 입력이 적용되지 않도록 "암시 적 없음"을 사용하는 것이 좋습니다. 또는 gfortran에 대해 -fimplicit-none과 같은 동일한 효과에 대해 컴파일러 옵션을 사용하십시오. –