字串及處理之三 使用TCHAR系列方案

2021-04-06 16:45:15 字數 1277 閱讀 8441

使用tchar系列方案編寫程式

tchar是一種字串型別,它讓你在以mbcs和unnicode來build程式時可以使用同樣的**,不需要使用繁瑣的巨集定義來包含你的**。 

tchar的引入,主要是在tchar.h檔案中,該檔案包含這方面的重要的定義資訊。

對於包含了對str函式或wcs函式進行顯式呼叫的**來說,無法非常容易地同時為ansi和unicode對這些**進行編譯。本章前面說過,可以建立同時為ansi和unicode進行編譯的單個源**檔案。若要建立雙重功能,必須包含tchar.h檔案,而不是包含string.h檔案。

tchar.h檔案的唯一作用是幫助建立ansi/unicode通用源**檔案。它包含你應該用在源**中的一組巨集,而不應該直接呼叫str函式或者wcs函式。如果在編譯源**檔案時定義了_unicode,這些巨集就會引用wcs這組函式。如果沒有定義_unicode,那麼這些巨集將引用str這組巨集。

tchar的定義如下:

#ifdef unicode

typedef wchar_t tchar;

#else

typedef char tchar;

#endif

所以用mbcs來build時,tchar是char,使用unicode時,tchar是wchar_t。

還有乙個巨集來處理定義unicode字串常量時所需的l字首。

#ifdef unicode

#define _t(x) l##x

#define _text(x) l##x

#define __t(x) l##x

#else

#define _t(x) x

#define _text(x) x

#define __t(x) x

#endif

## 是乙個預處理操作符,它可以把兩個引數連在一起。如果你的**中需要字串常量,在它前面加上_t巨集。如果你使用unicode來build,它會在字串常量前加上l字首。

tchar sznewtext = _t("we love bob!");

_unicode巨集用於c執行期標頭檔案,而unicode巨集則用於windows標頭檔案。當編譯源**模組時,通常必須同時定義這兩個巨集。

像是用巨集來隱藏setwindowtexta/w的細節一樣,還有很多可以供你使用的巨集來實現str***()和_mbs***()等字串函式。例如,你可以使用_tcsrchr巨集來替換strrchr()、_mbsrchr()和wcsrchr()。_tcsrchr根據你預定義的巨集是_mbcs還是unicode來擴充套件成正確的函式,就象setwindowtext所作的一樣。

TCHAR字串查詢 反向查詢字串

c 支援兩種字串,即常規的ansi編碼 字串 和unicode編碼 l 字串 相應的就有兩套字串處理函式,比如 strlen和wcslen,分別用於處理兩種字串。微軟將這兩套字符集及其操作進行了統一,通過條件編譯 unicode mbcs 來控制實際使用的字符集。當沒有定義 unicode mbcs...

TCHAR字串查詢 反向查詢字串

c 支援兩種字串,即常規的ansi編碼 字串 和unicode編碼 l 字串 相應的就有兩套字串處理函式,比如 strlen和wcslen,分別用於處理兩種字串。微軟將這兩套字符集及其操作進行了統一,通過條件編譯 unicode mbcs 來控制實際使用的字符集。當沒有定義 unicode mbcs...

不要在介面定義中使用 TCHAR 字串

本文 李馬 http blog.titilima.com show 568 1.html 其實在我最初的構想中,這個對話方塊的提示文字並不是系統預設的文字,而應該是我寫上去的 最起碼把 windows 替換成 july 但是我最後放棄了,因為我寫上去的字到最後顯示出來是亂碼。由於 runfiledl...