T在C 下的使用與說明

2021-07-12 04:10:49 字數 1232 閱讀 3869

_t

_t("")是乙個巨集,定義於tchar.h下。

c/c++ code

#define

__t(x) l ## x

#define

_t(x) __t(x)

他的作用是讓你的程式支援unicode編碼

因為windows使用兩種字符集ansi和unicode,前者就是通常使用的單位元組方式,但這種方式處理象中文這樣的雙位元組字元不方便,容易出現半個漢字的情況。而後者是雙位元組方式,方便處理雙位元組字元。windows nt的所有與字元有關的函式都提供兩種方式的版本,而windows 9x只支援ansi方式。

如果你編譯乙個程式為ansi方式,_t實際不起任何作用。

而如果編譯乙個程式為unicode方式,則編譯器會把"hello"字串以unicode方式儲存。_t和_l的區別在於,_l不管你是以什麼方式編譯,一律以unicode方式儲存。

lpstr:32bit指標指向乙個字串,每個字元佔1位元組

lpcstr:32-bit指標指向乙個常字串,每個字元佔1位元組

lpctstr:32-bit指標指向乙個常字串,每字元可能佔1位元組或2位元組,取決於unicode是否定義

lptstr:32-bit指標每字元可能佔1位元組或2位元組,取決於unicode是否定義

l是表示字串資源為unicode的。

比如wchar_t str = l"hello world!";

這個就是雙子節儲存字元了。

_t是乙個適配的巨集~

當#ifdef _unicode的時候

_t就是l

沒有#ifdef _unicode的時候

_t就是ansi的。

比如lptstr lpstr = new tchar[32];

tchar* szbuf = _t("hello");

以上兩句使得無論是在unicode編譯條件下都是正確編譯的。

而且ms推薦你使用相匹配的字串函式。

比如處理lptstr或者lpctstr 的時候,不要用strlen ,而是要用_tcslen

否則在unicode的編譯條件下,strlen不能處理 wchar_t*的字串。

t是非常有意思的乙個符號(tchar、lpctstr、lptstr、_t()、_text()...),它表示使用一種中間型別,既不明確表示使用 mbcs,也不明確表示使用 unicode。那到底使用哪種字符集?編譯的時候才決定 .

phpStudy在linux下的使用說明

phpstudy雖然好用,但是苦於沒有官方的使用教程,使用便捷性就大打折扣,幸好發現了一篇簡介的使用教程 kopm的部落格 完整版 php環境支援 解釋 apache nginx tengine lighttpd php版本 支援php5.2 5.3 5.4 5.5切換 作業系統 已經在centos...

phpStudy在linux下的使用說明

phpstudy雖然好用,但是苦於沒有官方的使用教程,使用便捷性就大打折扣,幸好發現了一篇簡介的使用教程 kopm的部落格 完整版 php環境支援 解釋 apache nginx tengine lighttpd php版本 支援php5.2 5.3 5.4 5.5切換 作業系統 已經在centos...

在C 中使用SQL儲存過程說明

一 表的建立sql語句 create table tree node id int not null node name varchar 20 collate chinese prc ci as null pat id int null url nvarchar 50 collate chinese...