我仍然看到有關使用LPTSTR
/TCHAR
類型等的建議,而不是LPWSTR
/WCHAR
。我相信Unicode的東西是在Win2k中引入的,我坦率地說不再爲Windows 98編寫代碼。 (當然,除了特殊情況)。鑑於我不關心Windows 98(或者甚至更少的ME),因爲它們是十年前的操作系統,是否有任何理由使用兼容性類型TCHAR
等?爲什麼仍然建議人們使用TCHAR
- 它直接使用WCHAR
有什麼好處?* Win32 API調用是否仍然相關?
回答
如果有人告訴你走路高達1,000,000行非_UNICODE C++中,用大量使用char
代替wchar_t
或TCHAR
或WCHAR
,可要準備好應對非Unicode的Win32 API聲明的。大規模的轉換非常昂貴,而且可能不是源貨幣準備支付的東西。
至於新的代碼,很好,有如此多的實例代碼有使用TCHAR,它可以更容易地剪切和粘貼,並且在某些情況下,如wchar_t
和WCHAR
爲unsigned short
WCHAR
之間的一些摩擦。
誰知道,也許有一天MS會在TCHAR下添加一個UTF-32數據類型?
關於拓展TCHAR的可能性有趣的一點。儘管UTF-32很可能在現存的每一段實際文本上都會佔用更多的空間,但不太可能。 HTML5完全拒絕它作爲編碼。 – kibibu 2010-06-03 01:09:36
@kib UTF-32評論意圖是幽默的。 – bmargulies 2010-06-03 01:10:05
@bmargulies糟糕:/ – kibibu 2010-06-03 01:35:52
其實,函數的unicode版本是在1993年用Win32在Windows NT 3.1中引入的。事實上,在基於NT的軟件中,幾乎所有* A函數都轉換爲Unicode,並在內部調用* W版本。此外,通過Microsoft Layer for Unicode支持9x上的* W功能。
對於新程序,我肯定會推薦直接使用TCHAR宏或WCHAR。我懷疑MS在NT的一生中會加入對任何其他字符大小的支持。對於現有的代碼庫,我想這將取決於支持Unicode與修復它的成本的重要性。爲了向後兼容,* A函數需要永遠留在Win32中。
- 1. SSI是否仍然相關?
- 2. eAccelerator是否仍然相關?
- 3. HTTP 1.0指令是否仍然相關?
- 4. Camera2 API onCaptureComplete()被調用,但相機狀態仍然是CONTROL_AE_STATE_PRECAPTURE
- 5. @import url(addonstyles.css)仍然相關?
- 6. Hibernate的Criteria API是否仍然不支持嵌套關係
- 7. DBCP(Apache Commons Database Connection Pooling)是否仍然相關?
- 8. Ada編程語言在軍隊中是否仍然相關?
- 9. 是否仍然有效?
- 10. Sharekit是否仍然有效?
- 11. 爲屬性設置相同的值是否仍然調用willSet和didSet?
- 12. android.hardware.Camera是否仍然適用於所有API級別?
- 13. 虛擬化仍然與Docker相關嗎?
- 14. Docker羣發現仍然相關?
- 15. Win32 API調用SslEncryptPacket()是做什麼的?
- 16. EntitySpaces的文檔是否仍然可用?
- 17. delayed_job是否仍然適用於mongo_mapper?
- 18. 是否SQL Server 2008 Express仍然可用?
- 19. Google GCM是否仍然可用?
- 20. 「address」HTML標籤是否仍然使用?
- 21. Win32 DDK:從驅動程序中斷調用API是否錯誤?
- 22. 在調用respondsToSelector之前檢查委託是否仍然存在
- 23. 我的方法在現代PHP編程中是否仍然相關?
- 24. BackAndroid - 應用仍然關閉
- 25. Haskell中的Win32 API調用?
- 26. Perl Win32 :: API()調用()函數
- 27. 這是否仍然是otsu二值化?
- 28. dealloc仍然被調用嗎?
- 29. 是遺留的Criteria API仍然推薦?
- 30. CAFilter仍然是一個私有API嗎?
類似於http://stackoverflow.com/questions/234365/is-tchar-still-relevant – dan04 2010-06-09 00:28:43
我還沒有看到開發人員建議使用'TCHAR's。但是,我看到開發人員建議保持一致。如果您調用通用API版本(例如'CreateFile'),那麼您需要保持一致並傳遞一個'LPCTSTR'。你確定你不會混淆這些嗎? – IInspectable 2016-06-26 09:25:33