宏长字符串关注

时间:2012-08-14 18:15:15

标签: c++ string macros

在我的应用程序中,我想将版本ID添加为宏,并在应用程序的多个部分中使用它。如this question中所述,我可以轻松地生成一个字符串:

#define APP_VER "1.0"
#define APP_CAPTION "Stackoverflow example app v." ## APP_VER

我现在的问题是,在某些部分,我需要将标题作为unicode字符串。

我尝试了以下内容:

MessageBoxW(0,_T(APP_CAPTION),L"Minimal Counterexample",0);

但它给出了错误“无法关注广泛的'Stackoverflow示例应用v。'狭窄的'1.0'“

我也试过

#define WIDE_CAPTION L ## APP_CAPTION

但这只是“LAPP_CAPTION”未定义。

我知道我可以在运行时将字符串转换为unicode,但这很麻烦。有人可以为我的问题提供宏级解决方案吗?

1 个答案:

答案 0 :(得分:2)

你只想:

#define APP_CAPTION "Stackoverflow example app v." APP_VER

由于APP_VER已经是一个字符串。

字符串连接是免费的,例如:

const char *str = "hello " "world"

完整的可编辑示例:

#include <iostream>
#define APP_VER "1.0"
#define APP_CAPTION "Stackoverflow example app v." APP_VER

int main() {
  std::cout << APP_CAPTION << "\n";
  return 0;
}