2014-12-03 100 views
-1

我正在考慮不同的實現的這部分代碼中使用的「參數」全局變量:應避免在功能

unsigned int whyamIexisting=100000; // also good for me static unsigned ... 

double rand_number_generation(){ 


    // create random number [0,1] 

    static unsigned int rand_counter=0; 

    rand_counter++; 

    if(rand_counter > whyamIexisting) { 
     update_my_seed(time(NULL)); 
     rand_counter=0; 
    } 
    // random number generation 
    return thats_your_gorgeous_numb(); // random algorithm 
} 

main(){ 

    ...modify whyamIexising 

    ...use rand_number_generation() several times 

    ... 

} 

我不該使用全局變量?如果是,你會建議什麼解決方案?

謝謝!

+2

我不明白...如果僅在main()函數的作用域中使用全局變量,那麼它有什麼意義?它應該被聲明爲非全局的,在main()函數的範圍內... – johnkork 2014-12-03 15:28:53

+2

您的示例不使用全局變量,因此除了完全刪除它之外,我們無法提供任何建議。它是否意味着隨機數發生器的狀態?在那種情況下,作爲RNG類的成員可能會更好。 – 2014-12-03 15:29:14

+0

對不起!代碼中存在錯誤:現在使用WhyamIexisting!在函數rand_number_generation() – 2014-12-03 15:34:34

回答

0

如果您正在使用多個函數並使用全局變量,我建議您不要修改它,而是使用局部變量來存儲它,然後進行修改。

我通常避免使用全局變量。 :-)

0

There ... gone!

double rand_number_generation(unsigned int whyamIexisting){ 

    // create random number [0,1] 

    static unsigned int rand_counter=0; 

    rand_counter++; 

    if(rand_counter > whyamIexisting) { 
     update_my_seed(time(NULL)); 
     rand_counter=0; 
    } 
    // random number generation 
    return thats_your_gorgeous_numb(); // random algorithm 
} 

main(){ 

    unsigned int limit = 17; 

    ...use rand_number_generation(limit) several times 

    ... 

} 

你的情況沒有一個全局變量。它只會使程序難以維持,如果它成長的話。它不會在您提供的示例中添加任何內容。

0

我不知道剩下的代碼,所以它基於你發佈的片段,可能是完全錯誤的。

whyamIexistingrand_number_generation運行環境的描述是一種描述,但它也描述了它的狀態,與rand_counter相同。

從標籤我看到你用C++寫的,這是一種面向對象的語言。關於面向對象的事情是,你有,你知道,對象。也許不是每個人都會同意我的看法(想想我的高中IT老師),但我個人認爲把所有具有自己國家的東西放入課堂是一種很好的做法。是否包含whyamIexisting作爲字段的對象,rand_counter作爲另一個和rand_number_generation,因爲它的方法(可能是getter和setter爲whyamIexisting)解決您的問題?

除非在代碼的其他地方不使用whyamIexisting,否則您可以簡單地將其設置爲main,並將其作爲參數傳遞給函數rand_number_generation