_tmainkhông tồn tại trong C ++. mainlàm.
_tmain là một phần mở rộng của Microsoft.
mainlà, theo tiêu chuẩn C ++, điểm vào của chương trình. Nó có một trong hai chữ ký sau:
int main();
int main(int argc, char* argv[]);
Microsoft đã thêm một wmain thay thế chữ ký thứ hai bằng chữ này:
int wmain(int argc, wchar_t* argv[]);
Và sau đó, để dễ dàng chuyển đổi giữa Unicode (UTF-16) và bộ ký tự đa nhân của họ, họ đã xác định _tmaincái nào, nếu Unicode được bật, được biên dịch thành wmain, và ngược lại main.
Đối với phần thứ hai của câu hỏi của bạn, phần đầu tiên của câu đố là chức năng chính của bạn là sai. wmainnên wchar_ttranh luận chứ không phải char. Vì trình biên dịch không thực thi điều này cho mainhàm, nên bạn nhận được một chương trình trong đó một wchar_tchuỗi các chuỗi được truyền cho mainhàm, nó diễn giải chúng dưới dạng các charchuỗi.
Bây giờ, trong UTF-16, bộ ký tự được Windows sử dụng khi bật Unicode, tất cả các ký tự ASCII được biểu diễn dưới dạng cặp byte \0theo sau giá trị ASCII.
Và vì CPU x86 là endian nhỏ, thứ tự của các byte này được hoán đổi, do đó giá trị ASCII xuất hiện trước, sau đó là byte rỗng.
Và trong một chuỗi char, chuỗi thường được kết thúc như thế nào? Đúng, bởi một byte null. Vì vậy, chương trình của bạn nhìn thấy một chuỗi các chuỗi, mỗi chuỗi dài một byte.
Nói chung, bạn có ba tùy chọn khi thực hiện lập trình Windows:
- Hoàn toàn sử dụng Unicode (gọi wmain và đối với mọi hàm API của Windows có các đối số liên quan đến char, hãy gọi 
-Wphiên bản của hàm. Thay vì CreatWindow, hãy gọi CreateWindowW). Và thay vì sử chardụng wchar_t, vân vân 
- Vô hiệu hóa Unicode. Gọi main và CreateWindowA và sử dụng 
charcho chuỗi. 
- Cho phép cả hai. (gọi _tmain và CreateWindow, sẽ phân giải chính / _tmain và CreateWindowA / CreateWindowW) và sử dụng TCHAR thay vì char / wchar_t.
 
Điều tương tự cũng áp dụng cho các loại chuỗi được xác định bởi windows.h: LPCTSTR phân giải thành LPCSTR hoặc LPCWSTR và đối với mọi loại khác bao gồm char hoặc wchar_t, phiên bản -T- luôn tồn tại có thể được sử dụng thay thế.
Lưu ý rằng tất cả điều này là cụ thể của Microsoft. TCHAR không phải là một loại C ++ tiêu chuẩn, nó là một macro được định nghĩa trong windows.h. wmain và _tmain cũng chỉ được xác định bởi Microsoft.