例如:

// This will become either SomeMethodA or SomeMethodW,
// depending on whether _UNICODE is defined.
SomeMethod( _T( "My String Literal" ) );

// Becomes either AnotherMethodA or AnotherMethodW.
AnotherMethod( _TEXT( "My Text" ) );

我看到两者。 _T似乎是为了简洁和_TEXT的清晰度。这仅仅是一种主观的程序员偏好或者是比更多的技术?举例来说,如果我使用了另一种,将我的代码无法编译针对特定系统或一些较旧版本的头文件?

有帮助吗?

解决方案

SDK的一个简单的grep告诉我们,答案是没关系,他们都是一样的。它们都变成__T(x)

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define _T(" *.h 
crt\src\tchar.h:2439:#define _T(x)       __T(x) 
include\tchar.h:2390:#define _T(x)       __T(x)

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define _TEXT(" *.h 
crt\src\tchar.h:2440:#define _TEXT(x)    __T(x) 
include\tchar.h:2391:#define _TEXT(x)    __T(x)

和的完整性:

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define __T(" *.h 
crt\src\tchar.h:210:#define __T(x)     L ## x 
crt\src\tchar.h:889:#define __T(x)      x 
include\tchar.h:210:#define __T(x)     L ## x 
include\tchar.h:858:#define __T(x)      x

然而,技术上的,对于C ++,你应该使用TEXT()代替_TEXT(),但(最终)扩展到同样的事情。

其他提示

提交到Unicode,只是使用L"My String Literal"

雷蒙德陈

  

TEXT与_TEXT与_T,和UNICODE与_UNICODE

     

在平原版本而不   下划线影响的字符集   Windows的头文件当作   默认。所以,如果你定义UNICODE,   那么GetWindowText函数将映射到   GetWindowTextW代替   GetWinowTextA的,例如。   同样,文本宏将映射到   L“......”代替“......”。

     

以下划线的版本   影响字符集的C运行时   头文件当作默认。因此,如果   你定义_UNICODE,然后_tcslen会   地图wcslen而不是strlen的,对于   例。同样,_TEXT宏   将映射到L“......”代替“......”。

     

有关_T什么?好吧,我不知道   关于那一个。也许这只是给   节省的人一些打字。

短版本:_T()是一个懒惰的人的_TEXT()

请注意:你需要知道什么样的代码页源代码的文本编辑器使用的,当你写:

_TEXT("Some string containing Çontaining");
TEXT("€xtended characters.");

编译器看到的字节数取决于你的编辑器的代码页。

这里的一个有趣的从读公知的和尊敬的源。

  

类似地,_TEXT宏将映射到L “...”,而不是 “...”。

     

有关_T什么?好吧,我不知道这个问题的。也许这只是为了节省的人打字。

我从来没有见过任何人使用,而不是_TEXT() _T()

都不是。根据我的经验,有两种基本类型的字符串文字的,那些是不变的,而那些需要在你的代码本地化翻译。

所以你不必回来,并找出哪些是后来很重要的,因为你写的代码区分两者。

于是我就用_UT()为不可翻译的字符串,并ZZT()(或别的东西,很容易搜索)了解,将需要翻译的字符串。在代码_T()_TEXT()的实例是尚未被正确归类字符串文字的证据。

_UT ZZT都#define的至_TEXT

这些宏是从天抱过来时,应用程序可能会其实是想编一个都Unicode和ANSI版本。

有没有理由这样做今天 - 这是所有残留。微软被套牢永远支持每一个可能的配置,但你不是。如果你没有编译到两个ANSI和Unicode(也没有人,说实话)只是去与L“文本”。

和是的,在情况下,它现在尚不清楚:_T == _TEXT

使用没有,也请不要使用L“...”废话。 使用UTF-8的所有字符串,并把它们刚好路过微软的API之前转换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top