0

次のコードは、私のVC++2010プロジェクトではコンパイルされません。

define MY_MAJOR_VERSION   20
define OLESTR_(str)       L##str
define MOLE( STR )        OLESTR_(#STR)
define MAKE_STR(STR)      MOLE(STR)

REGMAP_ENTRY(MAKE_STR(VERSION), MAKE_STR(MY_MAJOR_VERSION))

VERSIONマクロ定義ではなく、単なるテキストです。最後に、私は欲しい:

REGMAP_ENTRY(L"VERSION", L"20")

しかし、デバッグモードでコンパイルすると、次のようになります。

REGMAP_ENTRY(L"VERSION", LL"20")

他の状況でデバッグモードで使用したことがあるので、これはプロジェクト設定だと思いますが、この問題は発生しません。文字列化演算子にまたはを挿入させるVC++2010設定はありますL_T

4

1 に答える 1

0

MAKE_STR私にとって、これは(私が変更したことに注意してくださいMAKE_OLESTR-質問に投稿されたコードのタイプミスだったと思います):

#define MY_MAJOR_VERSION   20
#define OLESTR_(str)       L##str
#define MOLE( STR )        OLESTR_(#STR)
#define MAKE_OLESTR(STR)      MOLE(STR)

REGMAP_ENTRY(MAKE_OLESTR(VERSION), MAKE_OLESTR(MY_MAJOR_VERSION))

に前処理します(で示されているようにcl /E test.c):

REGMAP_ENTRY(L"VERSION", L"20")

それはあなたが望むもののようです。

コマンドラインコンパイルを使用して再現できるものを投稿することをお勧めします。

于 2012-09-28T17:46:48.580 に答える