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 = 14
        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 = 14
        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
반응형

+ Recent posts