5

パラメータが行の先頭にあるマクロ (またはこれに対する回避策) を定義するにはどうすればよいですか?

#define SINGLETON_IMPLEMENTATION(className) \
    ##className* ##className::instance_ = NULL;

これにより、コンパイラの警告が表示されます (GCC 3.2.3): " '##' cannot appear at either end of a macro Expansion"

4

2 に答える 2

13

パラメータを別の文字列に追加するには、## のみが必要です。マクロは次のように再キャストできます

#define SINGLETON_IMPLEMENTATION(className) \
    className* className::instance_ = NULL;
于 2009-03-23T09:10:26.527 に答える
8

##連結演算子です。コンパイラはそれについて不平を言っているだけです。
トークンの前に何かがない場合、つまりマクロ展開の開始時にトークンを連結することはできません。##2 行目の先頭にあるを削除してみてください。
また、2番目##は間違っているようです。シングルトン ポインターを初期化するだけの場合は##、マクロから両方の を削除します。

于 2009-03-23T09:08:59.057 に答える