【问题标题】:Dynamic global variables in CC中的动态全局变量
【发布时间】:2013-02-18 01:16:37
【问题描述】:

有人可以解释一下为什么这不起作用:

int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2;

int main(int argc, char **argv){

     DIM *= 2;

     printf("\n Double DIM is %d \n",dDIM);

}

为什么打印的是 256 而不是 512?

【问题讨论】:

  • 更改DIM 不会自动更改dDIMdDIM 具有与您初始化它相同的值,除非您直接更改它(或通过指针或引用,但这些都不适用在这里)
  • 我如何编码让它动态变化?
  • C++ 中没有变量根据彼此的值自动更新的概念——至少不是语言内置的。如果你想更新这两个变量,你需要自己更新这两个变量。
  • “函数”是关于变量动态变化的概念。所以 halfDim() 和 doubleDim() 可以动态计算你想要的
  • 话虽如此,你可以使用#defines 来做你想做的事,但严重不推荐

标签: c variables dynamic global-variables


【解决方案1】:

如何对其进行编码以使其动态变化?

您可以使用函数代替全局变量:

int DIM = 128;

int hDIM(void) { return DIM / 2; }

int dDIM(void) { return DIM * 2; }

int main(int argc, char **argv){
     DIM *= 2;
     printf("\n Double DIM is %d \n",dDIM());
}

这样,hDIMdDIM 在您每次使用时都会根据 DIM 的当前值进行评估。按照您的代码的方式,值只分配给 hDIMdDIM 一次,在程序开始时,使用 DIM 那时的值。

【讨论】:

  • 我最初在调试时尝试过这个,但代码中的第二个错误让我认为它不起作用。谢谢
【解决方案2】:

因为dDim 在执行main 之前被评估。在开始 - 在调用 main 函数之前,DIM 是 128。dDim = 2 * DIM 这意味着 dDim 是 256。

然后调用main()函数,DIM设置为256。但是这一切对dDim没有影响。

如何对其进行编码以使其动态变化?

您可以使用下面 Caleb 提到的方法,也可以使用预处理器宏。

int DIM = 128;

#define hDIM ((DIM) / 2)
#define dDIM ((DIM) * 2)

int main() {
  DIM *= 2;
  printf("%d", dDIM); /*prints 512 :-)*/
  return 0;
}

但是我不推荐上述方法。这是令人讨厌且难以调试的。 例如,它没有通过这个测试:

assert_equal_float(2.5f, hDIM);/*when DIM is 5*/

【讨论】:

    【解决方案3】:

    这是因为您只在 main() 函数中修改了 DIM 的值,而在 256 的初始值之后,dDim 没有被修改,即 (128 * 2)

    int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2;
    

    上述语句设置的值如下:

    DIM = 128
    hDIM = 64
    dDIM = 256
    

    main()中,当你做DIM *= 2时,你只修改了DIM的值。由于您没有对hDIMdDIM 进行任何进一步分配,因此不会重新评估剩余的变量。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2015-06-12
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多