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