我编写了一个简单的测试程序来尝试子程序和Fortran中的调用语句。我在GNU / Linux中使用gfortran编译器。我已经声明了14个参数,这些参数在我的代码中相应编号。虽然当我尝试通过调用语句传递其中的11个参数时,我的代码完美地工作,但我遇到了一个相当奇怪的“语法错误”#39;当我尝试包含第12个参数时,我尝试通过call语句传递12个参数。问题可能是什么,我该如何解决?这是我正在讨论的程序
`
program test
IMPLICIT REAL*4(A-B,D-H,O-Z)
IMPLICIT COMPLEX(C)
COMPLEX*16 CQC,CQV
parameter k1=2
parameter k2=2
parameter k3=2
parameter k4=2
parameter k5=2
parameter k6=2
parameter k7=2
parameter k8=2
parameter k9=2
parameter k10=2
parameter k11=2
parameter k12=2
parameter k13=2
parameter k14=2
call bins(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12)
end program
subroutine bins(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12)
integer k1, k2, k3, k4, k5
end subroutine `
以下是我在“'来电”中包含k12时收到的错误语句然后编译它:
`
siddharth@siddharth-VBox:~/Desktop/Codes$ gfortran test6.for -o test6.out
test6.for:23.72:
call bins(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12
1
Error: Syntax error in argument list at (1)
test6.for:29.72:
subroutine bins(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k1
1
Error: Unexpected junk in formal argument list at (1)
test6.for:2.72:
program test
1
test6.for:31.72:
integer k1, k2, k3, k4, k5
2
Error: Two main PROGRAMs at (1) and (2)
`
我重申,当我在调用语句中包含参数k1到k11时,我在编译时遇到任何问题,它只引入了引入问题的第12个参数。任何帮助将不胜感激。
答案 0 :(得分:6)
按照惯例,扩展名为.for或.f的文件被视为固定格式源。固定表格行的陈述必须在第7栏和第72栏之间进行。请注意错误消息中的列位置 - 语句的结尾将被删除。
固定表单源对空白也不敏感。调用语句之前的所有parameter kxxx
赋值语句都不符合您的想法。
除非您要修改现有的遗留代码,否则请勿使用固定格式源。
除非您正在修改现有的遗留代码(或者可能参与一些通用编程的深奥应用),否则不要使用隐式类型。 IMPLICIT NONE
是你最好的朋友。