&引用;定义;宏连接和_文本 是否有任何方法来在C++(MS编译器)中定义宏?< /P>
我有这样的现有代码:&引用;定义;宏连接和_文本 是否有任何方法来在C++(MS编译器)中定义宏?< /P>,c++,C++,我有这样的现有代码: #define LOG_FILENAME _TEXT("VendorBlaBlaDriver.log") #define REGISTRY_FILENAME _TEXT("VendorBlaBlaDriver") #define VENDOR_NAME _TEXT("VendorBlaBla") 我想做以下几件事: #define NAME_PART1 "VenorBlaBla" #define NAME_PART2 "Driver" #define LOG_FILEN
#define LOG_FILENAME _TEXT("VendorBlaBlaDriver.log")
#define REGISTRY_FILENAME _TEXT("VendorBlaBlaDriver")
#define VENDOR_NAME _TEXT("VendorBlaBla")
我想做以下几件事:
#define NAME_PART1 "VenorBlaBla"
#define NAME_PART2 "Driver"
#define LOG_FILENAME _TEXT(NAME_PART1 NAME_PART2 ".log")
#define REGISTRY_FILENAME _TEXT(NAME_PART1 NAME_PART2)
#define VENDOR_NAME _TEXT(NAME_PART1)
但编译器给了我一个错误:
error C2308: concatenating mismatched strings
有什么方法可以做到这一点吗?问题是这是一个组件,我想稍后为编译器指定-D选项。我不想在源代码中存储NAME_PART1和NAME_PART2。这是因为_文本仅应用于NAME_PART1,而不应用于其他部分,这应该写成:
#define NAME_PART1 "VenorBlaBla"
#define NAME_PART2 "Driver"
#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log")
#define REGISTRY_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2)
#define VENDOR_NAME _TEXT(NAME_PART1)
不匹配的原因是,文本定义的是宽字符串,而其他字符串仍然是普通字符串。这是因为文本仅应用于名称部分1,而不应用于其他部分,因此应写成:
#define NAME_PART1 "VenorBlaBla"
#define NAME_PART2 "Driver"
#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log")
#define REGISTRY_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2)
#define VENDOR_NAME _TEXT(NAME_PART1)
不匹配的地方是,文本定义了一个宽字符串,而其他字符串仍然是普通字符串。这不起作用吗(还没有找到一个编译器来尝试它):
然后让编译器将这两个字符串连接起来。这不管用吗(还没有一个编译器来试用):
然后让编译器将这两个字符串连接起来。您不能两次应用
\u TEXT
宏。或在多个字符串上,但可以连接结果。即
#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log")
然而,你真的不应该麻烦。
\u TEXT
宏是在世纪之交使用的,当时还存在非Unicode平台。今天我们只需编写#定义名称\u第1部分“Venorballa”
;没有人再销售Windows 95软件了。您不能两次应用\u TEXT
宏。或在多个字符串上,但可以连接结果。即
#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log")
然而,你真的不应该麻烦。
\u TEXT
宏是在世纪之交使用的,当时还存在非Unicode平台。今天我们只需编写#定义名称\u第1部分“Venorballa”
;没有人再销售Windows 95软件了。可能与否重复,那里没有文本宏您只需键入#定义日志(u FILENAME NAME)u PART1 NAME(u PART2).LOG“或者我遗漏了什么吗?提示:如果您按照建议多次使用\u TEXT
,您可以使用简短的\u T
宏,这扩展为相同的。可能与否重复,那里没有文本宏。您只需键入#define LOG(定义日志)文件名(u PART1 NAME)(u PART2.LOG)或我遗漏了什么吗?提示:如果您按照建议多次使用(u TEXT
)文本,则可以使用扩展为相同的短(T
宏。