Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;定义;宏连接和_文本 是否有任何方法来在C++(MS编译器)中定义宏?< /P>_C++ - Fatal编程技术网

&引用;定义;宏连接和_文本 是否有任何方法来在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
宏。