3

次の「##」はどういう意味ですか?

#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; }
4

3 に答える 3

7

演算子 ## は、間に空白を入れずに 2 つの引数を連結します。

#define glue(a,b) a ## b
glue(c,out) << "test";

これは次のようにも翻訳されます。

cout << "test";
于 2013-08-03T09:20:57.907 に答える
1

これは、トークンの貼り付けまたはトークンの連結と呼ばれます。

## (二重番号記号) 演算子は、マクロ定義で指定されたマクロ呼び出し (テキストおよび/または引数) で 2 つのトークンを連結します。

詳細については、GNU GCC コンパイラの公式ドキュメントを参照してください

于 2013-08-03T09:20:46.417 に答える
1

トークン間に空白を残さずにトークンを連結します。基本的に、そこに ## がなかった場合

public: inline varType getfunName(void) const { return varName; }\

funNameプリコンパイラはパラメータ値に置き換えません。と##getおよびfunNameは別個のトークンです。つまり、プリコンパイラは結果を置き換えfunNameてから連結できます。

于 2013-08-03T09:22:12.500 に答える