7

我是 C++ 编码的新手,来自 Java 和 C# 背景。我对从最基本的#define 术语开始泛滥感到困惑:

#define _tmain wmain

当我很久以前第一次学习 C 时,主要功能是:

int main(int argc, char *argv[])

在我创建的 Visual C++ 项目中,它做了 main 函数:

int _tmain(int argc, _TCHAR* argv[])

我只是想知道为什么需要从 to 进行名称wmain翻译_tmain?为什么不直接使用原始的 Cmain函数原型呢?

一般来说,似乎有很多#define 将一些看起来很清楚的东西重命名为看起来更神秘和不太清晰的东西(我的意思wmain_tmain??)。

感谢您容忍可能是一个非常明显的问题。

4

2 回答 2

13

这是 Visual C++ 特有的功能,它不是 C++ 的一部分。

大多数 Windows API 函数有两个版本:以 结尾的W,用于宽字符串(wchar_t字符串)和以 结尾的A,用于窄字符串(char字符串)。实际的 Windows API“函数”没有任何后缀,并且被定义为根据设置扩展为正确版本的宏。

T名称(如和_TCHAR_tmain用于相同目的:它们是根据您的编译设置扩展为正确名称的宏,因此wchar_twmain用于宽字符支持,或charmain用于窄字符支持。

这个想法是,如果您使用与字符类型无关的名称(T名称)编写代码,则可以编译代码以使用窄字符 (ASCII) 或宽字符 (Unicode) 而无需更改它。权衡是您的代码的可移植性较差。

于 2011-02-08T18:51:27.737 回答
5

因为 Microsoft 决定将 Unicode 支持添加到 C++ 的最佳方法是添加一个TCHAR类型,该类型是 #definedcharwchar_t取决于项目属性 > 配置属性 > 常规 > 字符集的值。_tmain也 #defined 到main(接受chars)或wmain(接受wchar_ts),具体取决于该设置。

于 2011-02-08T18:52:42.683 回答