我正在尝试编译fortran代码。它将分析Y目录中的X文件,然后使用结果创建一个新文件Z.但是出现了一些错误。
当我编写目录时,我发现它对于一行来说太多了,然后我尝试在下一行中继续它:
namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/'
+ 'espec.fits'
但是,当我尝试使用命令
进行编译时gfortran Codigo.f -o TESTE -Lcfitsio -lcfitsio
我收到此错误消息:
+ 'espec.fits' 1
错误:名称中的字符无效(1)
有人能帮助我吗?其实我不知道这个错误是什么。该目录是100%正确的。当我将档案移动到一个更简单的目录,以便能够在一行中写入所有内容时,它就可以了!那么“+”有什么问题吗?
谢谢。
实际上,当我添加“&”时在该行的最后,它给我这个错误信息:
namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/'& 1
错误:(1)处的不可分类陈述 Codigo.f:60.7:
+ 'espec.fits' 1
错误:名称中的字符无效(1)
并使用“//”:
namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/'// 1
错误:表达式中的语法错误(1) Codigo.f:60.7:
+ 'espec.fits' 1
错误:名称中的字符无效(1)
非常感谢你帮助我。好吧,我解决了转换为“.f90”形式的问题。
还有一个问题:你知道为什么它不能识别代码中的注释“c”吗?再次感谢你! :)
答案 0 :(得分:3)
这部分汇编声明:
gfortran Codigo.f
会将源文件及其.f
后缀视为固定格式源。这意味着第6列中的任何字符(空白或0
除外)都表示延续行。
但是,您收到的错误消息表明您的代码段第二行中的+
不在第6列中,并且编译器将其视为新实体名称中的初始字符。无效。 +
在前一行中与n
垂直对齐的事实强化了我的怀疑,这可能是您问题的根源。
如现在删除的答案所示,添加&符号在这种情况下实际上没有帮助,如果你继续告诉编译器它正在处理固定格式的源文件。 &
仅用于自由格式源文件中的延续。添加字符串连接运算符//
也无济于事,因为它后面没有其他字符串,而是一行结尾。 //&
会有所帮助,但可能没必要。
我认为您有两种可能的解决方案,但只选择一种:
.f90
,这会导致gfortran
将源文件视为自由格式。如果你选择选项2(我建议你),你可以在续行的末尾使用&
,或者你可以简单地合并这些行。在自由格式中,最大行长度为132个字符。
答案 1 :(得分:1)
添加高性能Mark的答案:
如果继续使用FORTRAN 77,大多数编译器都可以选择增加允许的行长度,例如gfortran的-ffixed-form -ffixed-line-length-none
。如前所述,Fortran> = 90的行长度为132,因此您不需要拆分该行。
最后,如果你想在Fortran> = 90中拆分线,你需要两个&符号。在大多数情况下,您需要一个,但要分割一个字符串,您需要两个:
namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/&
&espec.fits'