我知道如何在Fortran中使用IF
和ENDIF
,但是在我從別人那裏得到的許多代碼中,有一個#
符號在IF
之前,這是什麼意思?IF和ENDIF之前的#是什麼意思
!USES:
#if (defined X)
use Y
#endif
我知道如何在Fortran中使用IF
和ENDIF
,但是在我從別人那裏得到的許多代碼中,有一個#
符號在IF
之前,這是什麼意思?IF和ENDIF之前的#是什麼意思
!USES:
#if (defined X)
use Y
#endif
這些是預編譯宏而不是Fortran語句。它們與正則表達式if
相同,只是在編譯時和different syntax略有差異。
請注意,預處理器指令不是任何Fortran標準的一部分,並且每個編譯器都不支持它們。通常,它們與C預處理器指令相同,但並非總是如此。
非常感謝您的解釋。 – newbie
假設你有一個文件:
! test.F:
program A
x=1
#ifdef NEW
x=0
#endif
write(*,*) x
end
,如果你使用一個預處理器編譯:
ifort -DNEW test.F -o a.out
你應該得到x = 0的
否則,如果您不-DNEW像編譯
ifort test.F -o a.out
在這種情況下,你得到x = 1。 ifdef內部的代碼沒有被編譯。 Here are compile time options for gfortran.。 example is this question的有用情況。
謝謝,這些都很有用。 – newbie
除了答案中的要點之外,還應該注意:與預處理有關的放置/使用不受Fortran的if語句規則的制約。這就是爲什麼你可以通過這種方式有條件地完成'use'語句。 – francescalus
根據Fortran編譯器的不同,類似於cpp的預處理由命令行選項-fpp或-cpp或文件名後綴.F90或.F的大寫或GUI項目設置調用。沒有這些,#號指令將被標記爲錯誤。 – tim18