マクロ展開:C私は、コンパイル時のデフォルト値で配列を埋めるために使用するマクロを繰り返すマクロを持っているため
const int array [512] =
{
MACRO_REPEAT(512, -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
マクロの繰り返しがMACRO_REPEAT_512に展開されますが、今、私は他のマクロを使用していました配列のサイズとして、のように:
#define ARRAY_LENGTH 512
const int array [ARRAY_LENGTH ] =
{
MACRO_REPEAT(ARRAY_LENGTH , -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
しかし、これはMACRO_REPEAT_ARRAY_LENGTHに展開、それを連結する前にARRAY_LENGTH
値を展開しません。これはMARO_REPEAT_X * Yに拡大する
#define X 512
#define Y 512
const int array [X][Y] =
{
MACRO_REPEAT(X*Y , -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
:他の例では、拡張のより多くのレベルを含む多次元配列のためであろう。ですから、それらの値を他のマクロに連結する前に最後の数値に展開する方法はありますか?
単純にループや 'memset()'を使うのはなぜですか?はい、実行時には動作しますが、比較的簡単に目的の効果を達成できます。 – Peter
GCCには、 'int array [ARRAY_LENGTH] = {[0 ... 3] = -2、[4] = 10、[5] =など、同じ値に要素の範囲を初期化できる拡張があります。 2、[6 ... ARRAY_LENGTH-1] = -2、}; ' –
@Peter私は知っているが、私は組み込みシステムで作業していて、これをフラッシュに保存したいと思っている(const qualifierで更新された質問) – rnunes