質問

#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
    static CEntityFactory<DLLClassName> mapClassName( #mapClassName );
.

これは、MSVCでコンパイルされることを意味している、半減期のエイリアン群MODからのマクロです。

前のマクロの#が前に引数を見たことがない、そして私はこれがMSVC固有のものか単なる珍しいかどうかはかなりわからない。それはどういう意味ですか?

役に立ちましたか?

解決

これは標準CとC ++の両方の一部であり、実装固有ではありません。#前処理演算子はその引数を描いています。オペランドによって指定されたパラメータ(この場合はパラメータmapClassName)のマクロに渡され、文字列がそれらからリテラルになります。そのため、簡単な例では、

#define STRINGIZE(x) # x

STRINGIZE(Hello World)
// gets replaced with
"Hello World"
.

引数トークンはではなく、rinsizedが置き換えられる前に置き換えられているので、HelloまたはWorldがマクロとして定義されている場合、結果は同じになります。追加レベルのIDIRECTION を使用して、引数マクロが交換されます(リンクされた答えは連結演算子、##について説明しますが、rsypization演算子に等しく適用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top