1

以下が有効なコードであることはわかっています。

#define SOMEMACRO 10
int arr[SOMEMACRO];

これは次のようになりint arr[10]ます。

その 2 倍のサイズの配列を作成したい場合 (それでも元のマクロが別の場所に必要な場合)、これは有効なコードですか?

#define SOMEMACRO 10
int arr[2 * SOMEMACRO];

これはint arr[2 * 10]プリコンパイル後のものです。これはまだコンパイラによって定数式と見なされますか?

ざっと見てみると動作しているように見えますが、これは定義された動作ですか?

4

4 に答える 4

0

はい、有効な数値である限り、定数式です。そして、それが機能したと言うなら、コンパイラがそれでうまく機能したことがわかります。

あなたが知っているように、私たちはできません

int x;
scanf("%d", &x);
int arr[2 * x];

それは定数ではないからです。しかし、あなたが書いたものは定数なので、大丈夫です

于 2013-07-30T10:28:56.530 に答える