Fortran 中包含文件中的指令
Directives in Included files in Fortran
假设我有一个文件 test.f90
(自由格式代码),其中包含一些其他文件 foo.h
(固定代码)。
两者不能很好地协同工作,因为它们有不同的注释风格,所以我在 foo.h
源代码的顶部放置了一个预处理器指令 !DIR$ NOFREEFORM
,它告诉英特尔的 Fortran 编译器 ifort
将该文件解释为固定格式的源代码。
不幸的是,我在 test.f90
中的其余代码出现错误,表明 ifort
将其解释为固定格式代码而不是自由格式代码。
我没有严格检查,但是 是否有可能 foo.h
中的预处理器指令导致 ifort
将 test.f90
中的代码解释为已修复-form? 我不认为这是可能的,因为 ifort
将每个包含的文件视为一个单独的编译,而不是仅仅复制粘贴代码。
最新标准规定
The effect of the INCLUDE line is as if the referenced source text
physically replaced the INCLUDE line prior to program processing.
因此,包含文件中的预处理器指令完全有可能(事实上绝对不可避免)会导致编译器更改其对代码的解释。
include
-d 文件是不是独立的编译单元。
我想您应该可以使用!DEC$ FREEFORM
再次切换编译器的行为。
假设我有一个文件 test.f90
(自由格式代码),其中包含一些其他文件 foo.h
(固定代码)。
两者不能很好地协同工作,因为它们有不同的注释风格,所以我在 foo.h
源代码的顶部放置了一个预处理器指令 !DIR$ NOFREEFORM
,它告诉英特尔的 Fortran 编译器 ifort
将该文件解释为固定格式的源代码。
不幸的是,我在 test.f90
中的其余代码出现错误,表明 ifort
将其解释为固定格式代码而不是自由格式代码。
我没有严格检查,但是 是否有可能 foo.h
中的预处理器指令导致 ifort
将 test.f90
中的代码解释为已修复-form? 我不认为这是可能的,因为 ifort
将每个包含的文件视为一个单独的编译,而不是仅仅复制粘贴代码。
最新标准规定
The effect of the INCLUDE line is as if the referenced source text physically replaced the INCLUDE line prior to program processing.
因此,包含文件中的预处理器指令完全有可能(事实上绝对不可避免)会导致编译器更改其对代码的解释。
include
-d 文件是不是独立的编译单元。
我想您应该可以使用!DEC$ FREEFORM
再次切换编译器的行为。