"Define"宏串联和_TEXT
"Define" Macro Concatenation and _TEXT
在c++(ms编译器)中有没有连接#define宏的方法?
我有这样的现有代码:
#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。
不能两次应用_TEXT
宏。或者在多个字符串上,但您可以将结果连接起来。即
#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log")
不过,你真的不该麻烦。_TEXT
宏是在世纪之交使用的,当时仍然存在非Unicode平台。今天我们只写#define NAME_PART1 L"VenorBlaBla"
;没有人再销售Windows95软件了。
这是因为_TEXT仅应用于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)
不匹配的是_TEXT正在定义一个宽字符串,其中其他字符串仍然是普通字符串。
这不管用吗(手头还没有编译器来试用):
#define LOG_FILENAME _TEXT(NAME_PART1) _TEXT(NAME_PART2) _TEXT(".log")
然后让编译器将这两个字符串连接起来。
相关文章:
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 如何以静态代码分析友好的方式使用 #define 防护?
- C++相当于整数的 #define
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 如何将旧的 C 样式 #define 映射与现代C++进行调整?
- 使用 sf::Text 数组时崩溃
- 找不到 #define 的函数定义
- "#define X X"是什么意思?
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 为什么 sf::Text 显示点而不是数字?
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 为 g++ build 设置超时,为 Sublime Text 运行?
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- c中 #define 的不足
- 编辑期间的 QTableWidgetItem text() 属性
- 使用 [#define & #ifdef] 跨文件激活代码块