Compilation (1)处的字符名无效

Compilation (1)处的字符名无效,compilation,fortran,Compilation,Fortran,我正在尝试编译一个fortran代码。它将分析Y目录中的X文件,然后使用结果创建一个新文件Z。但有些事情发生了 当我写目录时,我发现它对于一行来说太多了,然后我尝试在下一行继续它,这样做: namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/' + 'espec.fits' 但是,当我尝试使用命令编译时 gfortran Codigo.f-o TESTE-Lcfitsio-Lcfitsio 我收到以下

我正在尝试编译一个fortran代码。它将分析Y目录中的X文件,然后使用结果创建一个新文件Z。但有些事情发生了

当我写目录时,我发现它对于一行来说太多了,然后我尝试在下一行继续它,这样做:

  namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/'
  +          'espec.fits'
但是,当我尝试使用命令编译时

gfortran Codigo.f-o TESTE-Lcfitsio-Lcfitsio

我收到以下错误消息:

错误:名称中的无效字符位于(1)

有人能帮我吗?其实我不知道这个错误是什么。目录是100%正确的。当我将归档文件移动到一个更简单的目录,以便能够在一行中写入所有内容时,它就起作用了!所以“+”有什么问题吗

多谢各位

编辑1 实际上,当我在行尾添加“&”时,它会给我以下错误消息:

错误:位于(1)的不可分类语句 第f部分:60.7:

 +          'espec.fits'                                           
  1
 +          'espec.fits'                                           
  1
错误:名称中的无效字符位于(1)

加上“/”:

错误:表达式(1)中的语法错误 第f部分:60.7:

 +          'espec.fits'                                           
  1
 +          'espec.fits'                                           
  1
错误:名称中的无效字符位于(1)

编辑2 非常感谢你帮助我。我解决了切换到“.f90”表单的问题


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

编译语句的这一部分:

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

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

如果您继续告诉编译器它正在处理一个固定格式的源文件,那么按照现在已删除的答案中的建议,添加“与”符号在这种情况下实际上没有帮助<代码>&仅用于自由格式源文件中的延续。添加字符串连接运算符
/
,也没有帮助,因为它后面不是另一个字符串,而是一行结尾<代码>/&会有所帮助,但可能没有必要

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

  • 坚持固定的形式,正确对齐
  • 将文件后缀更改为
    .f90
    ,这将导致
    gfortran
    将源文件视为自由格式

  • 如果您选择选项2(我建议),那么您可以在续行末尾使用
    &
    ,也可以简单地合并行。在自由格式中,最大行长度为132个字符。

    编译语句的这一部分:

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

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

    如果您继续告诉编译器它正在处理一个固定格式的源文件,那么按照现在已删除的答案中的建议,添加“与”符号在这种情况下实际上没有帮助<代码>&仅用于自由格式源文件中的延续。添加字符串连接运算符
    /
    ,也没有帮助,因为它后面不是另一个字符串,而是一行结尾<代码>/&会有所帮助,但可能没有必要

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

  • 坚持固定的形式,正确对齐
  • 将文件后缀更改为
    .f90
    ,这将导致
    gfortran
    将源文件视为自由格式

  • 如果您选择选项2(我建议),那么您可以在续行末尾使用
    &
    ,也可以简单地合并行。在自由格式中,最大行长度为132个字符。

    添加到High Performance Mark的答案中:

    如果继续使用FORTRAN 77,大多数编译器都可以选择增加允许的行长度,例如gfortran的
    -ffix form-ffix line length none
    。如前所述,Fortran>=90的行长度为132,因此不需要拆分行

    最后,如果要在Fortran>=90中拆分行,则需要两个符号AND。在大多数情况下,您需要一个,但要拆分字符串,您需要两个:

    namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/&
    &espec.fits'
    

    为高性能Mark的答案添加以下内容:

    如果继续使用FORTRAN 77,大多数编译器都可以选择增加允许的行长度,例如gfortran的
    -ffix form-ffix line length none
    。如前所述,Fortran>=90的行长度为132,因此不需要拆分行

    最后,如果要在Fortran>=90中拆分行,则需要两个符号AND。在大多数情况下,您需要一个,但要拆分字符串,您需要两个:

    namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/&
    &espec.fits'
    

    它无法识别注释中的
    C
    ,因为自由形式的注释是使用
    完成的。您必须更改它们,或者只纠正您原来的问题并坚持使用固定格式的源代码。它无法识别注释中的
    C
    ,因为自由格式的注释是使用
    完成的。您必须更改它们,或者只纠正原始问题,并坚持使用固定格式的源代码。