2016-12-12 20 views
3

トークンペーストを使用して、Cで単純な汎用構造体を定義しようとしています。例は以下である: - 私の理解トークンペーストが原因PARAMATERSの埋め込みにライン2及び5に必要であり、反対の理由ライン4上の必要はないに汎用構造体のトークンペースト

#define VECTOR(type, dimension, name) \ 
    typedef struct Vector_##type{ \ 
     type data[##dimension##]; \ 
     int dim = dimension; \ 
    }##name##; 
VECTOR(int, 3, Vector3i) 

。私は上記の簡単な例として、私の理解では何かが欠けているように見えるしかし

は、次のエラーが発生します - 上記のエラーを考える

pasting formed '[3', an invalid preprocessing token VECTOR(int, 3, Vector3i) 

pasting formed '3]', an invalid preprocessing token VECTOR(int, 3, Vector3i) 

expected member name or ';' after declaration specifiers 
VECTOR(int, 3, Vector3i) 
~~~~~~~~~~~~^~~~~~~~~~~~ 

、何が私が見逃していると一般的な定義するための適切な方法は何ですか純粋なCの構造?

+2

'int dim = dim;'はうまくいきません。 –

+0

私は投稿後もこれを認識しました。編集されました。 –

答えて

5

サイズまたはタイプ名にトークンの貼り付け操作は必要ありません。

実際には複数から1つのトークンを作成するために使用されます。したがって、Vector_##typeの場合、単一のVector_intトークンを作成することは理にかなっています。それは単一[3]トークンを作成しようとする場所

それは[##dim##]で意味がありません。それは3つの別々のトークンでなければなりません:[の後に3とそれに続いて]となります。これは[dim]マクロで取得します。

構造の後にtypedefという名前で同じです。