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

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

造成这种情况的原因是什么?


跃然一笑
浏览 881回答 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[])这完全是错误的。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;}或者您可以预先决定是使用宽字符还是窄字符。*-)

幕布斯6054654

_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