2016-11-30 74 views
0

我開始爲用C++編寫的Windows桌面開發一個全新的項目。當我學習Windows編程時,我發現使用TCHAR是一個很大的改進,因爲我可以在不更改代碼的情況下構建ANSI或Unicode版本的程序。但是,我從來沒有真正使用過構建ANSI版本的選項。此外,在C++的標準庫中,沒有TCHAR,我必須爲std :: string,std :: stringstream等及其寬字符串對等創建typedefs。所以目前我正在考慮放棄TCHAR來支持wchar_t,並且我收集了以下優點和缺點。今天我應該使用TCHAR

優點:

  • TCHAR是一個宏觀的,所以如果我不使用它,前端編譯器和智能感知會給出更好的結果。
  • 它更明確的是變量的類型。
  • L「」比_T(「」)更容易輸入。

缺點:對於字符類型(儘管我並不真的需要ANSI版本,我發現使用抽象字符類型是一個實用的功能,以及如果

  • 損失模塊化在將來我需要一個UTF-8或UTF-32版本?)。
  • 我必須用W來後綴一些API函數,例如GetWindowTextW。

而且我的問題:

  • 有沒有在C更簡單的方法++標準庫使用TCHAR比我上面描述的一個?像具有這些typedefs的標準頭文件一樣?
  • 你認爲我的推理是正確的嗎?
  • 我錯過任何重要的觀點嗎?
  • 今天最新的解決方案是什麼?專業的Windows程序員是否仍然使用TCHAR(在新代碼中)?
  • 如果我刪除TCHAR,比應該寫L「」還是「」而不是_T(「」)?
+0

http://stackoverflow.com/questions/234365/is-tchar-still-relevant – Deduplicator

+0

感謝您的鏈接,我也發現它,但我的問題有點不同,無論如何,我不認爲這一點2008年的答案可以在2016年被自動接受爲最先進的解決方案。 – z32a7ul

+2

國際海事組織這是不值得的額外努力,堅持一個,並在適當時進行轉換。如果TCHAR能夠完美實施,那將是另一回事,但事實並非如此。在我們公司,我們堅持使用std :: string並且使用UTF-8字符串,這很好地發揮作用,當我們需要處理Win32時,我們轉換爲wchar_t –

回答

1

現代的Windows所有ANSI功能在內部轉換char*wchar_t*和調用功能相同UNICODE版本。基本上,通過採用TCHAR而不是wchar_t你什麼也得不到,但必須處理古怪的語法。