0

下面的代碼在我的VC++ 2010項目無法編譯:字符串化預處理器操作符在什麼條件下添加_T?

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

回答

0

對於我來說,這(請注意,我改變MAKE_STRMAKE_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") 

這似乎是你想要的。

您可能想要發佈一些可以使用命令行編譯來重現的內容。