4

マクロを同じ名前の適切な typedef に置き換えたい。私は持っている

#define FooType char*

サードパーティのライブラリで、これによりコードの一部が壊れます(より正確には、使用を余儀なくされ、自分で変更できないコード)。#undefそれを同じ名前の typedef に置き換えてから、マクロに置き換えたいと思います。私はそのようなことを試しました:

#define TMP_MACRO FooType
#undef FooType
typedef TMP_MACRO FooType;
#undef TMP_MACRO

しかし、プリプロセッサはこれを次のように拡張します。

typedef FooType FooType;

(少なくともそれはg++ -E私に言ったことです)。したがって、マクロTMP_MACROはすぐには展開されません。「FooType」がないため、コンパイルされません。

FooTypeマクロを適切な型に置き換えて、後でマクロを未定義にするにはどうすればよいですか? それともこれは不可能ですか?

4

2 に答える 2

9

typedef宣言は通常 1 行で行いますが、行番号はコンパイラにとっては意味がありません。

typedef FooType
#undef FooType
FooType;
于 2012-07-24T15:41:51.697 に答える
0

なぜ単純ではないのですか

#undef FooType
typedef char* FooType

TMP_MACROプリプロセッサに置き換えるように指示するので、取得する出力は正しいです(後でFooTypeを使用FooTypeするという事実は、これに関しては何の意味もありません)。undef

于 2012-07-24T15:15:47.537 に答える