2012-10-12 34 views
1

我寫了一個子程序的Fortran程序,我想執行的命令(在程序目錄中刪除文件並打開一個新的)第一個,也是唯一的一次,則子程序調用。我知道我可以通過在子程序之外的主程序中創建一些標誌來實現這一點,我在程序啓動時將其設置爲false,然後在進入子程序時將其設置爲true。然後,我可以在if語句中使用該標誌來確定是否要執行初始調用時要執行的命令。但是這需要我修改現有的程序,如果我能避免它,我不想這樣做。有沒有其他方法可以做我想做的事情?如何在首次進入Fortran子程序時首次執行命令?

+2

看[這裏](http://stackoverflow.com/questions/2582409/are-local-variables-in-fortran-77-static-or-stack -dynamic)用於保存''屬性以使變量保持靜態。 – ceving

+0

是的,我知道'保存'屬性,但我不知道我將如何使用它的這種情況。 – rks171

+2

使用靜態變量將修改保留在您的函數的本地。第一個電話可以清除該標誌,接下來的電話可以兌現。 – ceving

回答

4

一個例子可能是:

subroutine test(a) 
    implicit none 
    integer, intent(inout) :: a 
    logical, save :: first_time=.true. 

    if(first_time) then 
    first_time=.false. 
    a = a + 12345 
    else 
    a = a - 67890 
    end if 

end subroutine test 
+1

帶初始值的局部變量被隱式保存,因此顯式的'save'屬性是多餘的。 –

+2

但爲了安全和清晰,爲什麼不添加它? – weymouth

+0

我現在明白了。我沒有意識到first_time的聲明是.true。只有在子程序第一次輸入時纔會受到尊重。我認爲每次輸入「測試」時,都會將first_time設置爲等於.true。再次。現在我可以看到,重新進入「測試」後,所保存的值得到尊重。謝謝。 – rks171

1

如何使用輸出文件的某些特性,以確定是否要刪除嗎?時間戳,文件鎖定,一個特定的文件擴展名等