2013-03-19 30 views

Trả lời

20

_T là viết tắt của “văn bản”. Nó sẽ biến chữ của bạn thành một ký tự Unicode rộng khi chỉ và nếu bạn đang biên dịch các nguồn của bạn với sự hỗ trợ Unicode. Xem http://msdn.microsoft.com/en-us/library/c426s321.aspx.

+4

Về mặt kỹ thuật, '_T()' chỉ được sử dụng với thư viện thời gian chạy C, để sử dụng với kiểu dữ liệu '_TCHAR'. Tương đương Win32 là macro 'TEXT()' để sử dụng với kiểu dữ liệu 'TCHAR'. Cả hai bản đồ để 'char' hoặc' wchar_t' tùy thuộc vào việc '_UNICODE' và' UNICODE' được định nghĩa trong quá trình biên dịch, tương ứng. Cả hai thường được xác định/không xác định với nhau, vì vậy nhiều người có xu hướng trao đổi chúng và mọi thứ thường hoạt động. Nhưng chúng được * logic * riêng biệt và * nên * được xử lý phù hợp. Sử dụng '_TCHAR' và' _T() 'với hàm C. Sử dụng 'TCHAR' và' TEXT() 'với API Win32. –

+0

@RemyLebeau: Bây giờ, đây là câu hỏi phức tạp: Câu hỏi nào cần sử dụng với loại 'CString' của MFC/ATL? 'CString' được triển khai cả về CRT lẫn API Windows. – IInspectable

+0

Mỗi tài liệu: "*** CString dựa trên kiểu dữ liệu' TCHAR' **. * ", Vì vậy hãy sử dụng' TEXT() '. –

10

Từ MSDN:

Sử dụng _T vĩ mô để mã hóa các chuỗi chữ quát, để chúng biên dịch thành chuỗi Unicode dưới dạng Unicode hoặc dưới dạng chuỗi ANSI (bao gồm MBCS) mà không có Unicode

8

Thực tế được sử dụng cho các dự án yêu cầu hỗ trợ Unicode ANSI. Nó cho trình biên dịch biên dịch chuỗi ký tự dưới dạng Unicode hoặc ANSI tùy thuộc vào giá trị của một trình biên dịch trước định nghĩa.

Lý do bạn muốn thực hiện việc này là một vấn đề khác. Nếu bạn muốn tự mình hỗ trợ Unicode thì chỉ cần viết Unicode, trong trường hợp này là L"Hello". Macro _T() đã được thêm khi bạn cần hỗ trợ Windows NT trở lên (hỗ trợ Unicode) và Windows 9x/ME (không hỗ trợ). Những ngày này, bất kỳ mã nào sử dụng các macro này đều lỗi thời vì tất cả các phiên bản Windows hiện đại đều dựa trên Unicode.

Các vấn đề liên quan