2


0

パラメータが行の先頭にあるマクロ(またはこれに対する回避策)を定義する方法を教えてください。

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

これはコンパイラに警告を与える(GCC 3.2.3): "'##'はマクロ展開のどちらの終わりにも現れることができない"

2 Answer


12


パラメータを別の文字列に追加するには##だけが必要です。 あなたのマクロは

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


6


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