2016-09-16 49 views
1

我知道如何在Fortran中使用IFENDIF,但是在我從別人那裏得到的許多代碼中,有一個#符號在IF之前,這是什麼意思?IF和ENDIF之前的#是什麼意思

!USES: 
#if (defined X) 
    use Y 
#endif 
+0

除了答案中的要點之外,還應該注意:與預處理有關的放置/使用不受Fortran的if語句規則的制約。這就是爲什麼你可以通過這種方式有條件地完成'use'語句。 – francescalus

+0

根據Fortran編譯器的不同,類似於cpp的預處理由命令行選項-fpp或-cpp或文件名後綴.F90或.F的大寫或GUI項目設置調用。沒有這些,#號指令將被標記爲錯誤。 – tim18

回答

4

這些是預編譯宏而不是Fortran語句。它們與正則表達式if相同,只是在編譯時和different syntax略有差異。

請注意,預處理器指令不是任何Fortran標準的一部分,並且每個編譯器都不支持它們。通常,它們與C預處理器指令相同,但並非總是如此。

+0

非常感謝您的解釋。 – newbie

4

#ifdef和#endif是預處理指令。

假設你有一個文件:

! 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的有用情況。

+0

謝謝,這些都很有用。 – newbie

相關問題