2010-06-03 70 views
2

我仍然看到有關使用LPTSTR/TCHAR類型等的建議,而不是LPWSTR/WCHAR。我相信Unicode的東西是在Win2k中引入的,我坦率地說不再爲Windows 98編寫代碼。 (當然,除了特殊情況)。鑑於我不關心Windows 98(或者甚至更少的ME),因爲它們是十年前的操作系統,是否有任何理由使用兼容性類型TCHAR等?爲什麼仍然建議人們使用TCHAR - 它直接使用WCHAR有什麼好處?* Win32 API調用是否仍然相關?

+1

類似於http://stackoverflow.com/questions/234365/is-tchar-still-relevant – dan04 2010-06-09 00:28:43

+0

我還沒有看到開發人員建議使用'TCHAR's。但是,我看到開發人員建議保持一致。如果您調用通用API版本(例如'CreateFile'),那麼您需要保持一致並傳遞一個'LPCTSTR'。你確定你不會混淆這些嗎? – IInspectable 2016-06-26 09:25:33

回答

1

如果有人告訴你走路高達1,000,000行非_UNICODE C++中,用大量使用char代替wchar_tTCHARWCHAR,可要準備好應對非Unicode的Win32 API聲明的。大規模的轉換非常昂貴,而且可能不是源貨幣準備支付的東西。

至於新的代碼,很好,有如此多的實例代碼有使用TCHAR,它可以更容易地剪切和粘貼,並且在某些情況下,如wchar_tWCHARunsigned shortWCHAR之間的一些摩擦。

誰知道,也許有一天MS會在TCHAR下添加一個UTF-32數據類型?

+0

關於拓展TCHAR的可能性有趣的一點。儘管UTF-32很可能在現存的每一段實際文本上都會佔用更多的空間,但不太可能。 HTML5完全拒絕它作爲編碼。 – kibibu 2010-06-03 01:09:36

+0

@kib UTF-32評論意圖是幽默的。 – bmargulies 2010-06-03 01:10:05

+0

@bmargulies糟糕:/ – kibibu 2010-06-03 01:35:52

0

其實,函數的unicode版本是在1993年用Win32在Windows NT 3.1中引入的。事實上,在基於NT的軟件中,幾乎所有* A函數都轉換爲Unicode,並在內部調用* W版本。此外,通過Microsoft Layer for Unicode支持9x上的* W功能。

對於新程序,我肯定會推薦直接使用TCHAR宏或WCHAR。我懷疑MS在NT的一生中會加入對任何其他字符大小的支持。對於現有的代碼庫,我想這將取決於支持Unicode與修復它的成本的重要性。爲了向後兼容,* A函數需要永遠留在Win32中。