1

マクロ(#define)を使用してtypedefを作成するにはどうすればよいですか?

私はさまざまな理由で、マクロを使用してCでtypedefを実行しようとしています。C++のテンプレートに沿ったものです。

#define例として、プリプロセッサがとを展開しtypedefstructその「コンテンツ」メンバーが次のタイプであると期待しcharます。

#define DEFINE_FOO_TYPE(content_type__, content_type_name__) \
typedef struct {                                             \
        content_type__ content;                              \
} content_type_name__

DEFINE_FOO_TYPE(char, foo_t);

foo_t foo_var;
foo_var.content = 'g';

どうやらそうではありません。このようなことをCで行うことは可能ですか、それともC ++テンプレートの唯一の方法ですか?

「C++テンプレートを使用しないのはなぜですか?」という質問を先取りするため。答えは、楽しいのでCでやろうとしているということです。

4

3 に答える 3

4

これを試して:

#define DEFINE_FOO_TYPE(content_type__, content_type_name__) \
typedef struct {                                             \
    content_type__ content;                              \
} content_type_name__

DEFINE_FOO_TYPE(char, foo_t);

int main() {
    foo_t foo_var;
    foo_var.content = 'g';
    return 0;
}

content_type_name__つまり、代わりに使用しますelement_type_name__

コンパイルの証明

于 2012-07-14T11:16:37.657 に答える
0

コードの最後の 2 行を main() または確実に機能する任意の関数に入れるだけです。

于 2012-07-14T12:35:29.513 に答える
0

些細すぎると思ったのでコメントに投稿しましたが、ここにあります:

確かに、引用されたコードを gcc に貼り付けているだけではありませんよね? 関数の外でコードを実行することはできません。最後の行を関数内に置きます。

于 2012-07-16T18:02:54.557 に答える