sg1*_*sg1 4 c++ windows winapi
我想知道为什么有这些宏的原因,如T,TEXT,_TEXT,__TEXT或__T,当它们最终都做同样的事情.
即
如果定义了UNICODE,则将"string"映射到L"string".
谢谢你的回答.在一个更实际的方法,有人可以解释下面给出的代码的行为?
#include <stdio.h>
#include <conio.h>
#include <tchar.h> // For _T and _TEXT
#include <windows.h> // For __TEXT
int __cdecl main ()
{
printf ("%s", _TEXT(__FILE__ )); // Works fine
printf ("%s", _T(__FILE__)); // Works fine
printf ("%s", __TEXT(__FILE__ )); // error C2065: 'L__FILE__': undeclared identifier
_getwch();
}
Run Code Online (Sandbox Code Playgroud)
更新:我认为我的代码与C预处理器标记化有关.我正在发布一个单独的问题.谢谢.
Chr*_*n.K 13
由于"神秘"的事情经常发生,雷蒙德陈提供了一些信息(重点补充):
那么所有这些不同的说法方式是什么呢?实际上有一种疯狂背后的方法.
没有下划线的普通版本会影响Windows头文件视为默认的字符集.因此,如果您定义UNICODE,那么GetWindowText将映射到GetWindowTextW而不是GetWindowTextA.类似地,TEXT宏将映射到L"..."而不是"...".
带有下划线的版本会影响C运行时头文件视为默认值的字符集.因此,如果您定义_UNICODE,那么_tcslen将映射到wcslen而不是strlen,例如.同样,_TEXT宏将映射到L"..."而不是"..."._T怎么样?好的,我不知道那一个.也许只是为了节省一些打字的人.
对于许多宏,有 Win32 宏和 C 运行时库的宏。这将解释 TEXT (Win32) 和 _TEXT (C 运行时库)。双下划线版本可能是不用于一般用途的辅助宏。对于那些认为 TEXT 太长的人来说,T 可能是一种方便。
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |