应避免使用全局变量作为"参数"在一个功能

时间:2014-12-03 15:25:29

标签: c++ global-variables

我正在考虑代码的这一部分的不同实现:

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

    ...

 }

我不应该使用全局变量吗?如果是,你会建议什么解决方案?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您正在使用多个函数并使用全局变量,我建议您不要修改它,而是使用局部变量来存储它,然后进行修改。

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

答案 1 :(得分:0)

那......走了!

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

    ...

 }

在你的情况下,没有必要有一个全局变量。它只会使程序难以维持,如果它要增长。它没有在您给出的示例中添加任何内容。

答案 2 :(得分:0)

我不知道其他代码,因此它基于您发布的片段,可能完全错误。

whyamIexisting是对运行rand_number_generation的环境的描述,但它也描述了它的状态,与rand_counter相同。

从标签我看到你用C ++编写,这是一种面向对象的语言。关于面向对象的事情是,你知道对象。可能并不是每个人都会同意我的看法(想想我的高中IT老师),但我个人认为把所有拥有它自己国家的东西都当作一种好的做法。对象是否包含whyamIexisting字段,rand_counter为另一个,rand_number_generation为其方法(可能是whyamIexisting的getter和setter)你的问题?

除非您不在代码中的任何其他位置使用whyamIexisting,否则您只需将其设置为main,并将其作为参数传递给函数rand_number_generation