为什么有一个定义_t​​main的宏?

时间:2011-02-08 18:47:45

标签: c++ visual-c++ macros character-encoding tchar

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

#define _tmain wmain

当我第一次学习C年龄时,主要功能是:

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

在我创建的Visual C ++项目中,它创建了主要功能:

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

我只是想知道为什么需要从wmain_tmain进行名称翻译?为什么不使用原始的C main函数原型?

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

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

2 个答案:

答案 0 :(得分:13)

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

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

T名称(例如_TCHAR_tmain)用于同一目的:它们是根据您的编译设置扩展为正确名称的宏,因此{{1} }和wchar_t用于广泛的字符支持,或wmainchar用于缩小字符支持。

我们的想法是,如果使用字符类型不可知的名称(main名称)编写代码,则可以编译代码以使用窄字符(ASCII)或宽字符(Unicode)而无需更改它。权衡是您的代码不太便携。

答案 1 :(得分:5)

因为Microsoft决定向C ++添加Unicode支持的最佳方法是添加TCHAR类型,根据Project的值,#{1}}或char #defined属性>配置属性>一般>字符集。根据该设置,wchar_t _tmain(需要main s)或char(需要wmain)#{定义wchar_t