2017-05-14 123 views
0

所以我很好奇。我有兩個功能,無論是工作,我希望他們的方式,有如下幾點:在不同的功能中使用相同的參數

//this function returns the absolute value of a number 
int abs(int y) { 
    if (y < 0) { 
     return -1 * y; 
    } 
    return y; 
} 

//gives a random number, multiplied by x, in the range 1-y 
int randomNum(int x, int y) { 
    srand((int)time(0)); 
    return abs(x * rand() % y) + 1; 
} 

他們都工作,所以它們的功能是沒有問題的。但是如果你會注意到,它們都使用一個名爲「int y」的參數。

我的問題是,儘管這兩個函數起作用,這種不好的做法可能會讓我在更復雜的程序中使用它嗎?或者這不重要,因爲這些變量對於它們各自的功能是本地的?

我的意思是,如果我將其中一個「int y」參數更改爲其他內容,我只是好奇而已,完全沒有什麼大不了的。

+0

你知道一個變量的範圍是什麼? – lU5er

+1

在C++程序中出現的每個名稱僅在稱爲其作用域的源代碼的一些可能不連續的部分中有效。http://en.cppreference.com/w/cpp/language/scope – 2017-05-14 15:54:02

+1

Offtopic:你應該只在程序中調用'srand',而不是在每個函數調用中調用。 – mch

回答

0

每當花括號內有變量{ }時,它就是範圍的局部。一旦離開braces就會死亡。

既然你問的代碼,

// y is declared in abs and is alive only in the abs 
int abs(int y) { 
    if (y < 0) { 
     return -1 * y; 
    } 
    return y; 
} 

// the previous y dies here and is inaccessible. 

// a new instance of y is created in randomNum and it's valid till the brace ends 
int randomNum(int x, int y) { 
    srand((int)time(0)); 
    return abs(x * rand() % y) + 1; 
} 

現在有點事情嘗試通過Jawad Le Wywadi

int main() 
{ 
    int a = 0; 
    ++a; 
    { 
     int a = 1; 
     a = 42; 
     cout << a; 
    } 
    cout << a; 
} 

指出,自己試試吧,讓我們知道你在實現評論。

2

我認爲簡單的程序可以。

但是,您應該使用與您名字第一個出生的孩子相同的注意來命名一個變量。

羅伯特C.馬丁,清潔代碼:敏捷軟件工匠

例如一本手冊,沒有人喜歡閱讀聲明int foo(int x, int y, int z, int xx, int bb, int cc .....)

+0

我認爲羅伯特馬丁說的就是這樣,我只是想澄清一下,謝謝。 –

相關問題