C中的动态全局变量

时间:2013-03-04 01:46:17

标签: c variables dynamic global-variables

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

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?

3 个答案:

答案 0 :(得分: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*/

答案 1 :(得分:1)

这是因为您只修改了main()函数中DIM的值,而dDim的初始值为256(128 * 2)后,int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2; 未被触及。

DIM = 128
hDIM = 64
dDIM = 256

以上语句将值设置如下:

main()

DIM *= 2 hDIM执行dDIM时,只修改DIM的值。由于您未对{{1}}或{{1}}进行任何进一步分配,因此不会重新评估其余变量。

答案 2 :(得分: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的当前值进行评估。代码的方式是,在程序开始时,使用DIM在该点的值,仅将值分配给hDIMdDIM一次。