2013-02-06 36 views
0

壞消息大家,混淆「不連續」和「去,繼續」在FORTRAN

我最近開始學習FORTRAN理解一個代碼,並將其轉化爲C++(我
知道什麼碼這對於這個問題並不重要,但要給出一些背景知識,這個代碼利用自適應網格上的搭配方法來解決邊界值問題。
看着代碼,有一些「去」的聲明結合「繼續」
真的讓我困惑。

下面是一個例子:

do 100 i=1, n 
    C DO SOMETHING HERE 
    if (some condition) go to 90 
    C DO SOME MORE STUFF HERE 
    90 continue 
    C EVEN MORE STUFF HERE 
100 continue 

我有一些C編程經驗,所以我會在C作爲
如下代碼我的兩種解釋,但我不知道哪一個(如果有的話!)是正確的翻譯:

for(int i=1;i<=n;i++) 
{ 
    //DO SOMETHING HERE 
    if(some condition) continue; 
    //DO SOME MORE STUFF HERE 
    //EVEN MORE STUFF HERE 
} 

或:

for(int i=1;i<=n;i++) 
{ 
    //DO SOMETHING HERE 
    if(!some condition) 
    { 
     //DO SOME MORE STUFF HERE 
    } 
    //EVEN MORE STUFF HERE 
} 

我想知道是否有人可以幫助我理解語法。

回答

4

Fortran的continue聲明不做任何事情。它只是作爲跳轉到的參考。在Fortran代碼中,程序跳過DO SOME MORE STUFF HERE,如果some conditiontrue。因此,你的第二個C版本是正確的。

+0

謝謝。那麼,只是使用「if-go to」而不是「if .not.-endif」的風格偏好? –

+0

它具有相同的效果,但我不會將它稱爲樣式問題:「GOTO某些標籤」語句的問題是帶有標籤的代碼難以維護,因爲您的程序可以從任何位置跳轉到帶有標籤的語句在該程序中,您可以編寫完全非結構化的代碼,請參閱Dijkstra的信函「Go To Statement Considered Harmful」

+1

http://web.archive.org/web /20090320002214/http://www.ecn.purdue.edu/ParaMount/papers/rubin87goto.pdf http://kerneltrap.org/node/553/2131 ...代表對方。 GOTO既不好也不壞。這只是一個聲明。 – Rook