(1)处的无效字符名称

时间:2013-12-01 13:43:35

标签: compilation fortran

我正在尝试编译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%正确的。当我将档案移动到一个更简单的目录,以便能够在一行中写入所有内容时,它就可以了!那么“+”有什么问题吗?

谢谢。

EDIT1

实际上,当我添加“&”时在该行的最后,它给我这个错误信息:

 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)

EDIT2

非常感谢你帮助我。好吧,我解决了转换为“.f90”形式的问题。

还有一个问题:你知道为什么它不能识别代码中的注释“c”吗?再次感谢你! :)

2 个答案:

答案 0 :(得分:3)

这部分汇编声明:

gfortran Codigo.f 

会将源文件及其.f后缀视为固定格式源。这意味着第6列中的任何字符(空白或0除外)都表示延续行。

但是,您收到的错误消息表明您的代码段第二行中的+不在第6列中,并且编译器将其视为新实体名称中的初始字符。无效。 +在前一行中与n垂直对齐的事实强化了我的怀疑,这可能是您问题的根源。

如现在删除的答案所示,添加&符号在这种情况下实际上没有帮助,如果你继续告诉编译器它正在处理固定格式的源文件。 &仅用于自由格式源文件中的延续。添加字符串连接运算符//也无济于事,因为它后面没有其他字符串,而是一行结尾。 //&会有所帮助,但可能没必要。

我认为您有两种可能的解决方案,但只选择一种:

  1. 坚持使用固定形式并正确对齐。
  2. 将文件后缀更改为.f90,这会导致gfortran将源文件视为自由格式。
  3. 如果你选择选项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'