有人可以解释为什么这不起作用:
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?
答案 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());
}
这样,hDIM
和dDIM
每次使用时都会根据DIM
的当前值进行评估。代码的方式是,在程序开始时,使用DIM在该点的值,仅将值分配给hDIM
和dDIM
一次。