2016-08-15 22 views
0

我是使用Fortran预处理语句的新手,并且有一个可能非常原生的问题。可以缩进Fortran预处理语句吗?我在Linux上使用Gfortran 4.8.1进行了测试(openSUSE Leap),结果证明它不能缩进。Fortran中的CPP预处理语句是否可以缩进?

下面的代码main.f90时与gfortran -cpp main.f90 -o main工作:

program main 
    implicit none 
#ifdef DEBUG 
    print *, "I am in debug mode" 
#endif 
    print *, "hello world!" 
end program main 

但下面抛出一个错误:

program main 
    implicit none 
    #ifdef DEBUG 
    print *, "I am in debug mode" 
    #endif 
    print *, "hello world!" 
end program main 

的错误消息是Error: Invalid character in name at (1)。 这是否意味着我们应该始终从该行的第一个开头写入预处理语句,或者它只是一个编译器特定的规则?任何帮助将不胜感激,并提前感谢!

回答

1

不,它们不能缩进,因为gfortran在traditional mode中运行CPP,它不允许缩进。他们必须始终从第一列开始。

您可以手动运行CPP,但要非常小心。 如果您在某处使用//字符串连接运算符,则预处理器会将其视为注释。您必须使用-C标志,如@ewcz在他/她的回答中所示,该标志禁止丢弃评论。

一些编译器提供自己的FPP预处理器,其行为不同。

+0

感谢您的意见。 gfortran是否支持任何其他预处理器或cpp是唯一可用的? – Ben

+0

直接从gfortran命令只传统的cpp。 –

2

您可以使用C预处理做加工,然后编译处理的文件,即,假设你的程序是在main.f90,事遂所愿:

cpp -nostdinc -C -P -w main.f90 > _main.f90 
gfortran -o main _main.f90 

在这方面,这个问题是相当有用:Indenting #defines

+0

感谢您的答案和链接是非常相关和有用的。 – Ben