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;}
或者您可以事先决定是使用宽字符还是窄字符。:-)
莫回无
TA贡献1865条经验 获得超7个赞
_T约定用于指示程序应使用为应用程序定义的字符集(Unicode,ASCII,MBCS等)。您可以使用_T()包围字符串,以便以正确的格式存储它们。
cout << _T( "There are " ) << argc << _T( " arguments:" ) << endl;
- 3 回答
- 0 关注
- 619 浏览
添加回答
举报
0/150
提交
取消