我是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
??)。
感谢您容忍可能是一个非常明显的问题。
答案 0 :(得分:13)
这是一个特定于Visual C ++的功能,它不是C ++的一部分。
大多数Windows API函数都有两个版本:以W
结尾的版本,用于宽字符串(wchar_t
字符串)和以A
结尾的版本,用于窄字符串(char
字符串)。实际的Windows API“函数”没有任何后缀,并且被定义为根据设置扩展到正确版本的宏。
T
名称(例如_TCHAR
和_tmain
)用于同一目的:它们是根据您的编译设置扩展为正确名称的宏,因此{{1} }和wchar_t
用于广泛的字符支持,或wmain
和char
用于缩小字符支持。
我们的想法是,如果使用字符类型不可知的名称(main
名称)编写代码,则可以编译代码以使用窄字符(ASCII)或宽字符(Unicode)而无需更改它。权衡是您的代码不太便携。
答案 1 :(得分:5)
因为Microsoft决定向C ++添加Unicode支持的最佳方法是添加TCHAR
类型,根据Project的值,#{1}}或char
#defined属性>配置属性>一般>字符集。根据该设置,wchar_t
_tmain
(需要main
s)或char
(需要wmain
)#{定义wchar_t
。