在不同的函数

时间:2017-05-14 15:49:18

标签: c++

所以我对某事感到好奇。我有两个功能,都按照我想要的方式工作,它们如下:

//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”参数更改为其他内容显然没什么大不了的,我只是很好奇,就是这样。

2 个答案:

答案 0 :(得分:2)

我认为简单的程序是可以的。

  

但是,您应该使用与您相同的谨慎来命名变量   说出生第一个孩子。

Robert C. Martin,清洁代码:敏捷软件工艺手册

例如,没有人愿意阅读声明int foo(int x, int y, int z, int xx, int bb, int cc .....)

答案 1 :(得分: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;
}

亲自尝试,让我们知道您在评论中意识到了什么。