誰かがこれが機能しない理由を説明できますか?
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);
}
なぜこれは512ではなく256を印刷するのですか?
誰かがこれが機能しない理由を説明できますか?
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);
}
なぜこれは512ではなく256を印刷するのですか?
動的に変化するようにコーディングするにはどうすればよいですか?
グローバル変数の代わりに関数を使用できます。
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です。これは256dDim = 2 * DIM
を意味します。dDim
次に、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()関数での値のみを変更したのに対し、その後は変更されていないためです。つまりdDim
、の初期値です。256
(128 * 2)
int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2;
上記のステートメントは、値を次のように設定します。
DIM = 128
hDIM = 64
dDIM = 256
main()
を行う場合、DIM *= 2
DIMの値のみを変更します。hDIM
またはにそれ以上の割り当てを行わなかったため、残りの変数は再評価されませんdDIM
。