2011-01-18 25 views
0

これが可能かどうかわかりませんが、 が可変長構造体をスタックに宣言しているマクロを記述したいと思います。Cスタック可変長構造体を書き込むマクロ?

#define STATICLIST(max)  struct SStaticList { int iSize; id iObjects[max]; } 

とこのようにそれを呼び出す:私はこのような何かをしたい

STATICLIST(32) Size32List 
STATICLIST(64) Size64List 

しかし、私はタイプstruct SStaticListエラーの再宣言に

+0

何が価値があるため、C++のテンプレートは合理的にこの種のものをサポートしています。 :) –

+0

私は長い時間C++プログラマーだったが、私は現在iPhone用に開発中であり、CとC++を混在させたくないことは知っている。 – CodeFlakes

+0

ちょうど副作用として、私は 'iSize'フィールドの正しい型は' size_t'と思う。 –

答えて

9

を得ているあなたのような何かができます同じ名前の構造体を避けるためには何かが必要です。

#define STATICLIST(max) struct { int iSize; id iObjects[max]; } 

これはそれを行う必要があります。あなたは、構造体名にサイズを含め##トークンの貼り付け操作を使用することができ

1

#define STATICLIST(max)  struct SStaticList##max { int iSize; int iObjects[max]; } 
+1

これは、マクロが同じ引数で複数回使用されたときにエラーになります – imaximchuk

+0

これは完全な解決策ではありませんが、異なるサイズのリストを作成できる可能性があります。それは何もないよりも優れています。 – CodeFlakes