为了账号安全,请及时绑定邮箱和手机立即绑定

C ++中_tmain()和main()有什么区别?

C ++中_tmain()和main()有什么区别?

C++
隔江千里 2019-08-09 11:34:00
C ++中_tmain()和main()有什么区别?如果我使用以下main()方法运行我的C ++应用程序,一切正常:int main(int argc, char *argv[]) {    cout << "There are " << argc << " arguments:" << endl;    // Loop through each argument and print its number and value    for (int i=0; i<argc; i++)       cout << i << " " << argv[i] << endl;    return 0;}我得到了我的期望,我的论点被打印出来了。但是,如果我使用_tmain:int _tmain(int argc, char *argv[]) {    cout << "There are " << argc << " arguments:" << endl;    // Loop through each argument and print its number and value    for (int i=0; i<argc; i++)       cout << i << " " << argv[i] << endl;    return 0;}它只显示每个参数的第一个字符。造成这种情况的区别是什么?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

_tmain是一个根据您是否使用Unicode或ASCII编译而重新定义的宏。它是Microsoft扩展,不保证可以在任何其他编译器上工作。

正确的声明是

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

如果定义宏UNICODE,则扩展为

int wmain(int argc, wchar_t *argv[])

否则它会扩展到

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

您的定义适用于每个,并且(如果您定义了UNICODE)将扩展为

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

这是完全错误的。

std :: cout适用于ASCII字符。如果使用宽字符,则需要std :: wcout。

尝试这样的事情

#include <iostream>#include <tchar.h>#if defined(UNICODE)
    #define _tcout std::wcout#else
    #define _tcout std::cout#endifint _tmain(int argc, _TCHAR *argv[]) {
   _tcout << _T("There are ") << argc << _T(" arguments:") << std::endl;

   // Loop through each argument and print its number and value
   for (int i=0; i<argc; i++)
      _tcout << i << _T(" ") << argv[i] << std::endl;

   return 0;}

或者您可以事先决定是使用宽字符还是窄字符。:-)


查看完整回答
反对 回复 2019-08-09
?
莫回无

TA贡献1865条经验 获得超7个赞

_T约定用于指示程序应使用为应用程序定义的字符集(Unicode,ASCII,MBCS等)。您可以使用_T()包围字符串,以便以正确的格式存储它们。

 cout << _T( "There are " ) << argc << _T( " arguments:" ) << endl;


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 619 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信