728x90
반응형
에러 메시지
문제 발생 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
PROGRAM Unexpected_STATEMENT_FUNCTION
IMPLICIT NONE
INTEGER :: i
DOUBLE PRECISION :: a ! Error line, "a" is NOT array
DOUBLE PRECISION, ALLOCATABLE :: b(:)
ALLOCATE(b(4))
DO i = 1, 4
a(i) = i ! Error line refered by compiler, "a" is array
b(i) = i*10.d0
ENDDO
WRITE(*,*) ">> a:", a
WRITE(*,*) ">> b:", b
END PROGRAM Unexpected_STATEMENT_FUNCTION
|
cs |
컴파일 결과
>> Error: Unexpected STATEMENT FUNCTION statement at (1)
./DSegFault.f90:25.10:
a(i) = i
1
Error: Unexpected STATEMENT FUNCTION statement at (1)
해결방법
- 변수/배열변수 선언/사용을 잘못햇을 때 발생
- DOUBLE PRECISION :: a --> DOUBLE PRECISION :: a(4) 로 변환하거나,
- a(i)가 아닌 a 로 사용
- 컴파일러는 사용자의 의도를 모르고 에러 발생 지점을 알려줌
- 위 코드에서 사용자의 원래 의도가 a를 배열로 사용하고자 했을 경우, 컴파일러가 알려주는 지점이 아니라, 변수 선언을 살펴봐야 함
수정 후 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
PROGRAM Unexpected_STATEMENT_FUNCTION
IMPLICIT NONE
INTEGER :: i
DOUBLE PRECISION :: a(4) ! Fix: "a" --> "a(4)"
DOUBLE PRECISION, ALLOCATABLE :: b(:)
ALLOCATE(b(4))
DO i = 1, 4
a(i) = i
b(i) = i*10.d0
ENDDO
WRITE(*,*) ">> a:", a
WRITE(*,*) ">> b:", b
END PROGRAM Unexpected_STATEMENT_FUNCTION
|
cs |
출력 결과
>> a: 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000
>> b: 10.000000000000000 20.000000000000000 30.000000000000000 40.000000000000000
728x90
반응형