コンパイルエラーあるある.初歩的ではありますが,気を付けましょう
チェック項目
- かっこがちゃんと閉じているかをチェックする(シンタックスハイライトしてくれるエディターを使ったほうがわかりやすいです)
VSコードだとこんな感じ(左からOKな場合,右側かっこが余分なとき,右側かっこが足りないとき)
2. Fortran77で固定形式(拡張子が.f, .for, .ftnの時)の時はプログラムは7~72カラムめに収まっているかをチェックする
例:以下のプログラムは固定形式だとコンパイルエラーになる
program test
implicit none
integer :: i
double precision :: val
do i = 1,40,1
val = i**2 + (i+1)**2 + (i+2)**2 + (i+3)**2 + (i+4)**2 + (i+5)**2
write(*,*) '>>> val = ',val,' (i = ',i, ')'
enddo
end program test
結果:intelでもgfortranでもエラーに
$ ifort test.f
test.f(10): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ...
val = i**2 + (i+1)**2 + (i+2)**2 + (i+3)**2 + (i+4)**2 + (i+5)**2
-----------------------------------------------------------------------------^
compilation aborted for test.f (code 1)
$ gfortran test.f
test.f:10:72:
10 | val = i**2 + (i+1)**2 + (i+2)**2 + (i+3)**2 + (i+4)**2 + (i+5)**2
| 1
Error: Syntax error in expression at (1)
対処法:&を用いて改行
program test
implicit none
integer :: i
double precision :: val
do i = 1,40,1
val = i**2 + (i+1)**2 + (i+2)**2
& + (i+3)**2 + (i+4)**2 + (i+5)**2 ! &を用いて改行する
write(*,*) '>>> val = ',val,' (i = ',i, ')'
enddo
end program test
結果:intelでもgfortranでもコンパイルできました
ちなみに実行すると
>>> val = 91.0000000000000 (i = 1 )
>>> val = 139.000000000000 (i = 2 )
>>> val = 199.000000000000 (i = 3 )
>>> val = 271.000000000000 (i = 4 )
>>> val = 355.000000000000 (i = 5 )
>>> val = 451.000000000000 (i = 6 )
>>> val = 559.000000000000 (i = 7 )
>>> val = 679.000000000000 (i = 8 )
>>> val = 811.000000000000 (i = 9 )
>>> val = 955.000000000000 (i = 10 )
>>> val = 1111.00000000000 (i = 11 )
>>> val = 1279.00000000000 (i = 12 )
>>> val = 1459.00000000000 (i = 13 )
>>> val = 1651.00000000000 (i = 14 )
>>> val = 1855.00000000000 (i = 15 )
>>> val = 2071.00000000000 (i = 16 )
>>> val = 2299.00000000000 (i = 17 )
>>> val = 2539.00000000000 (i = 18 )
>>> val = 2791.00000000000 (i = 19 )
>>> val = 3055.00000000000 (i = 20 )
>>> val = 3331.00000000000 (i = 21 )
>>> val = 3619.00000000000 (i = 22 )
>>> val = 3919.00000000000 (i = 23 )
>>> val = 4231.00000000000 (i = 24 )
>>> val = 4555.00000000000 (i = 25 )
>>> val = 4891.00000000000 (i = 26 )
>>> val = 5239.00000000000 (i = 27 )
>>> val = 5599.00000000000 (i = 28 )
>>> val = 5971.00000000000 (i = 29 )
>>> val = 6355.00000000000 (i = 30 )
>>> val = 6751.00000000000 (i = 31 )
>>> val = 7159.00000000000 (i = 32 )
>>> val = 7579.00000000000 (i = 33 )
>>> val = 8011.00000000000 (i = 34 )
>>> val = 8455.00000000000 (i = 35 )
>>> val = 8911.00000000000 (i = 36 )
>>> val = 9379.00000000000 (i = 37 )
>>> val = 9859.00000000000 (i = 38 )
>>> val = 10351.0000000000 (i = 39 )
>>> val = 10855.0000000000 (i = 40 )