有人可以解释为什么这不起作用:
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?
有人可以解释为什么这不起作用:
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?
我如何对其进行编码以使其动态更改?
您可以使用函数而不是全局变量:
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只分配一次。
因为在执行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*/
这是因为您只修改了DIMmain() 函数中的值,而在iedDim的初始值之后没有改变。256(128 * 2)
int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2;
上述语句设置的值如下:
DIM = 128
hDIM = 64
dDIM = 256
在main()你这样做的时候DIM *= 2,你只修改 DIM 的值。剩余的变量将不会被重新评估,因为您没有对hDIMor进行任何进一步的赋值dDIM。