2017-05-14 76 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

我认为罗伯特马丁说的就是这样,我只是想澄清一下,谢谢。 –

相关问题