标准宏促进字符串文本中的VC ++ wchar_t的(Standard macro to promo

2019-09-21 01:23发布

是否有一个标准的宏来转换一个字符串文字,其取代有一个预处理宏使用Visual Studio 2005中wchar_t的字符串?

例如,这个工程:

wchar_t* test = L"Hello World";

但这并不:

#define HELLOWORLD "Hello World"
wchar_t* test = L(HELLOWORLD);

我共享包含许多国际化字符串与不同平台上的几个不同的项目头文件,所以我不想改变头本身,也不加_T(),因为这是与平台相关。 所以我想的Unicode转换是在我的源代码,而不是在头部。 我知道我可以写我自己替换宏如图所示这里 ,但我不知道是否有在VS的标准方法?

这似乎对任何人编写国际代码很常见的情况,但我似乎无法找到与VS2005提供预定义的宏。

Answer 1:

没有,就是这个没有“标准”宏。 该标准是前缀宽字符串与L并省略从窄串前缀。

为什么这样一个宏甚至需要存在的唯一原因是,当你针对不同的是不支持Unicode的平台。 在这种情况下,一切都需要一个窄字符串。 如果你不处理缺少Unicode支持的平台,那么一切也许应该是一个宽字符串的所有时间。

_TTEXT在Windows头提供了精确为此宏:维护一个代码库,可用于Windows NT,它支持Unicode,和Windows 9x中,缺乏支持Unicode编译两者。

我无法想象,你为什么会需要这样一个宏,如果你是不是已经包括Windows头,但如果这样做,这是很简单,自己写一个。 除了比你会需要知道什么时候字符串文字应宽字符串时,他们应该是狭窄的字符串。 有没有“标准” #define对于这一点,无论是。 在Windows头使用UNICODE预处理器符号,但你不能靠这个被其他平台定义。 所以,现在你回到你开始的地方。

为什么你认为你需要为这个宏,再? 如果你硬编码字符串的类型wchar_t* ,那么你总是会希望使用宽字符常量,因此你总是希望用L字头。

当你使用_T和/或TEXT从Windows头宏,你也不能硬编码类型的字符串为wchar_t* 。 相反,您使用的TCHAR宏,它会自动解析到依赖于的定义相应的字符类型UNICODE符号。



文章来源: Standard macro to promote string literal to wchar_t in VC++