简单Fortran 77程序的编译错误
我从Fortran 77复制并粘贴了以下程序: 我将其保存为简单Fortran 77程序的编译错误,fortran,gfortran,fortran77,Fortran,Gfortran,Fortran77,我从Fortran 77复制并粘贴了以下程序: 我将其保存为circle.f,并从终端(macOS Sierra)编译: 它返回了错误消息: circle.f:1:1: program circle 1 Error: Non-numeric character in statement label at (1) circle.f:1:1: program circle 1 Error: Unclassifiable statement at (1) 我怎样才能修好它?(对于另一个类
circle.f
,并从终端(macOS Sierra)编译:
它返回了错误消息:
circle.f:1:1:
program circle
1
Error: Non-numeric character in statement label at (1)
circle.f:1:1:
program circle
1
Error: Unclassifiable statement at (1)
我怎样才能修好它?(对于另一个类似的问题,这并不能解决问题。)Fortran 77具有固定格式的源代码。语句只能使用第7列和第73列之间的字符。(前6个字符用于将整行声明为注释,作为数字标签,或表示这一行是前一行的延续。)第74个和后面的字符被忽略 在此范围内,将忽略空格。因此,以下几行是相同的:
column 1 1 2 2 3 3 4 4
1 5 0 5 0 5 0 5 0 5
-----------------------------------------------
if (i .le. 10) call my_sub(i)
if(i.le.10)callmy_sub(i)
i f ( i. le .10) cal lmy_ sub(i)
我让你决定哪一本最容易读
但是,如果您从第一个字符开始,即使使用起始“program”语句,编译器也会抱怨。它需要一个
c
,c
,代码>(将整行声明为注释)或数字作为数字标签的开头。Fortran 77具有固定格式的源代码。语句只能使用第7列和第73列之间的字符。(前6个字符用于将整行声明为注释,作为数字标签,或表示这一行是前一行的延续。)第74个和后面的字符被忽略
在此范围内,将忽略空格。因此,以下几行是相同的:
column 1 1 2 2 3 3 4 4
1 5 0 5 0 5 0 5 0 5
-----------------------------------------------
if (i .le. 10) call my_sub(i)
if(i.le.10)callmy_sub(i)
i f ( i. le .10) cal lmy_ sub(i)
我让你决定哪一本最容易读
但是,如果您从第一个字符开始,即使使用起始“program”语句,编译器也会抱怨。它需要一个c
,c
,
(将整行声明为注释)或一个数字作为数字标签的开头。尝试在程序循环之前添加6个空格。
@apocapse:这解决了问题,非常感谢!(我要删除我的问题吗?)教程中说“在Fortran 77中忽略空格。因此,如果删除Fortran 77程序中的所有空格,编译器仍然可以接受该程序,但人类几乎无法阅读。”我不清楚为什么添加空格会使它起作用。使用“Fortran必须有空格”快速搜索(当我发布这个问题时,我不知道该搜索什么)在Google上返回“Fortran 77语法要求在任何命令之前提供6个空格。这6个空格源于Fortran的穿孔卡版本。在前6个空格之后,如果你愿意,你可以为缩进添加额外的空格。”这不是特别的“fortran 77"语法,它是固定格式的fortran,目前的fortran标准仍然支持它。学习它很好,因为您无疑会遇到旧代码,但对于新的工作,您可以使用自由格式,如果您愿意的话。@agentp:谢谢您提供的有用信息。请尝试在程序循环
@apocapse:之前添加6个空格,这样就解决了问题,而不是ks很多!(我要删除我的问题吗?)教程中说“在Fortran 77中忽略空格。因此,如果删除Fortran 77程序中的所有空格,编译器仍然可以接受该程序,但人类几乎无法读取。”我不清楚为什么添加空格会使其工作。使用Google上的“fortran必须有空格”(我在发布此问题时不知道搜索什么)返回“fortran 77语法要求在任何命令之前提供6个空格。这6个空格源自fortran的穿孔卡版本。在前6个空格之后,如果您愿意,可以为缩进添加额外的空格。特别是,这不是“fortran 77”语法,它是固定格式的fortran,目前的fortran标准仍然支持它。学习它很好,因为您无疑会遇到旧代码,但对于新的工作,如果您愿意,您可以使用自由格式。@agentp:感谢您提供的有用信息。简要说明:我不确定是否启用了c
、c
、!
注释可能有很多标记。但显然,p
不是;)在标准f77中,“C”或星号可以在第1列中用于注释。较新版本允许代码>也是固定格式的,因为它可以在任何地方(除了作为延续标记的地方)启动注释。快速注意:我不确定c
、c
和代码>是注释唯一可能的标记。但显然p
不是;)在标准f77中,可在第1列中使用“C”或星号进行注释。较新版本允许代码>也是固定格式的,因为它可以在任何地方启动注释(作为延续标记的地方除外)
column 1 1 2 2 3 3 4 4
1 5 0 5 0 5 0 5 0 5
-----------------------------------------------
if (i .le. 10) call my_sub(i)
if(i.le.10)callmy_sub(i)
i f ( i. le .10) cal lmy_ sub(i)