2016-01-30 39 views
0

在我的代碼下面variable1只在第一次調用時被初始化爲0。我擔心的是,在每個遞歸調用static variable1;正在宣佈。這會導致問題跟蹤數字嗎?還是編譯器知道在每次遞歸調用中跳過聲明?這個靜態變量在這個遞歸senerio中的功能如預期的那樣?

我的代碼:

void funtion1(numberOfTimesCalled){ 
    numberOfTimesCalled++; 

    static variable1; 

    if(numberofTimesCalled = 0){ 
     variable1 = 0; 
    } 

    <some processing> 

    variable1= variable1+1; 

    if(variable1<10){ 
     function1(numberOfTimesCalled); 
    } 
} 
+0

你顯示的是不是有效的C代碼。同時解釋使用靜態變量的原因可能有助於確定您可能遇到的任何其他問題。 –

+1

注意這個條件'if(numberofTimesCalled = 0){'總是假。它將'0'賦值給'numberofTimesCalled','ifif'中的表達式產生'0'。所以'if'條件總是錯誤的。這很可能是一個錯字。 –

回答

1

我擔心的是,在每一個遞歸調用靜態變量1;正在申報 。

是的,它是安全的,因爲與靜態存儲時間不會再重新聲明的變量。它的整個生命週期都是程序的完整執行,並且僅在之前被初始化。所以,除非你打算「復位」的varaible1的價值,你甚至不需要特殊 條件:

if(numberofTimesCalled == 0){ // assuming you intended to check with ==, 
           // a single = is for assignment. 
     variable1 = 0; 
    } 

因爲靜態持續時間的變量將是零,在程序啓動時初始化。

+0

'if'語句需要幫助。 – user3386109

+1

我剛剛對它發表評論;) –

相關問題