Compilation (1)处的字符名无效
我正在尝试编译一个fortran代码。它将分析Y目录中的X文件,然后使用结果创建一个新文件Z。但有些事情发生了 当我写目录时,我发现它对于一行来说太多了,然后我尝试在下一行继续它,这样做: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 我收到以下
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
,因为自由格式的注释是使用完成的代码>。您必须更改它们,或者只纠正原始问题,并坚持使用固定格式的源代码。