次の「##」はどういう意味ですか?
#define CC_SYNTHESIZE(varType, varName, funName)\
protected: varType varName;\
public: inline varType get##funName(void) const { return varName; }\
public: inline void set##funName(varType var){ varName = var; }
次の「##」はどういう意味ですか?
#define CC_SYNTHESIZE(varType, varName, funName)\
protected: varType varName;\
public: inline varType get##funName(void) const { return varName; }\
public: inline void set##funName(varType var){ varName = var; }
演算子 ## は、間に空白を入れずに 2 つの引数を連結します。
#define glue(a,b) a ## b
glue(c,out) << "test";
これは次のようにも翻訳されます。
cout << "test";
これは、トークンの貼り付けまたはトークンの連結と呼ばれます。
## (二重番号記号) 演算子は、マクロ定義で指定されたマクロ呼び出し (テキストおよび/または引数) で 2 つのトークンを連結します。
詳細については、GNU GCC コンパイラの公式ドキュメントを参照してください。
トークン間に空白を残さずにトークンを連結します。基本的に、そこに ## がなかった場合
public: inline varType getfunName(void) const { return varName; }\
funName
プリコンパイラはパラメータ値に置き換えません。と##
、get
およびfunName
は別個のトークンです。つまり、プリコンパイラは結果を置き換えfunName
てから連結できます。