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

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;}

它只显示每个参数的第一个字符。

造成这种情况的区别是什么?


隔江千里
浏览 620回答 3
3回答

守候你守候我

_tmain是一个根据您是否使用Unicode或ASCII编译而重新定义的宏。它是Microsoft扩展,不保证可以在任何其他编译器上工作。正确的声明是&nbsp;int&nbsp;_tmain(int&nbsp;argc,&nbsp;_TCHAR&nbsp;*argv[])如果定义宏UNICODE,则扩展为int&nbsp;wmain(int&nbsp;argc,&nbsp;wchar_t&nbsp;*argv[])否则它会扩展到int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])您的定义适用于每个,并且(如果您定义了UNICODE)将扩展为&nbsp;int&nbsp;wmain(int&nbsp;argc,&nbsp;char&nbsp;*argv[])这是完全错误的。std :: cout适用于ASCII字符。如果使用宽字符,则需要std :: wcout。尝试这样的事情#include&nbsp;<iostream>#include&nbsp;<tchar.h>#if&nbsp;defined(UNICODE) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;_tcout&nbsp;std::wcout#else &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;_tcout&nbsp;std::cout#endifint&nbsp;_tmain(int&nbsp;argc,&nbsp;_TCHAR&nbsp;*argv[])&nbsp;{ &nbsp;&nbsp;&nbsp;_tcout&nbsp;<<&nbsp;_T("There&nbsp;are&nbsp;")&nbsp;<<&nbsp;argc&nbsp;<<&nbsp;_T("&nbsp;arguments:")&nbsp;<<&nbsp;std::endl; &nbsp;&nbsp;&nbsp;//&nbsp;Loop&nbsp;through&nbsp;each&nbsp;argument&nbsp;and&nbsp;print&nbsp;its&nbsp;number&nbsp;and&nbsp;value &nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i<argc;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_tcout&nbsp;<<&nbsp;i&nbsp;<<&nbsp;_T("&nbsp;")&nbsp;<<&nbsp;argv[i]&nbsp;<<&nbsp;std::endl; &nbsp;&nbsp;&nbsp;return&nbsp;0;}或者您可以事先决定是使用宽字符还是窄字符。:-)

莫回无

_T约定用于指示程序应使用为应用程序定义的字符集(Unicode,ASCII,MBCS等)。您可以使用_T()包围字符串,以便以正确的格式存储它们。&nbsp;cout&nbsp;<<&nbsp;_T(&nbsp;"There&nbsp;are&nbsp;"&nbsp;)&nbsp;<<&nbsp;argc&nbsp;<<&nbsp;_T(&nbsp;"&nbsp;arguments:"&nbsp;)&nbsp;<<&nbsp;endl;
打开App,查看更多内容
随时随地看视频慕课网APP