1#include "stdafx.h"
2
3int _tmain(int argc, _TCHAR* argv[])
4{
5
6 return 0;
7
8}
2
3int
4{
5
6
7
8}
想当然,很好,很容易。试试列出命令的参数:
10 }
11
运行结果竟然是这样的:
D:\MyData\CSharp\Projects\test\Debug>test 1 003A5210 |
“003A5210”是什么值?一开始就弄不懂了。
如果把_tmain函数变为:
1
int
main(
int
argc,
char
*
argv[])
2 {
3 cout
<<
argc
<<
endl;
4 cout
<<
argv[
0
]
<<
endl;
5
return
0
;
6 }
7
2 {
3
4
5
6 }
7
运行结果正常:
D:\MyData\CSharp\Projects\test\Debug>test 1 d:\MyData\CSharp\Projects\test\Debug\test.exe |
头大了。最后分别对两个函数运用断点中的反汇编看看,发现原来**argv竟然是wchar_t**,再翻弄了一下_TCHAR的声明:typedef wchar_t
一切明白了。要输出这个_TCHAR只能用cout的另一个版本:wcout。
为什么呢?原因很简单,因为他们都带了一个“w”在前面啊!
能正确输出_TCHAR* argv[]的版本:
10 }
11
给出一个网上对_tmain的一个有用的定义:
1
#ifdef _UNICODE
2
#define
_tmain wmain
3
#define
_tWinMain wWinMain
4
#else
5
#define
_tmain main
6
#define
_tWinMain WinMain
7
#endif
2
3
4
5
6
7