visual studio 2013
其他版本
此主題尚未評級 -
評價此主題
為簡化**的傳輸,便於在國際上使用,microsoft 執行庫為許多資料型別、例程和其他物件提供 microsoft 特有的一般文字對映。
您可以使用 tchar.h 中定義的這些對映,根據使用 #define 語句定義的清單常數,編寫可以為單位元組、多位元組或 unicode 字符集編譯的泛型**。
一般文字對映是與 ansi 不相容的 microsoft 擴充套件。
使用 tchar.h,可以從同乙個源生成單位元組應用程式、多位元組字符集 (mbcs) 應用程式和 unicode 應用程式。
tchar.h 定義(以 _tcs 為字首的)巨集,這些巨集根據正確的預處理器定義對映到適當的 str、_mbs 或 wcs 函式。
若要生成 mbcs,請定義 _mbcs 符號。
若要生成 unicode,請定義 _unicode 符號。
若要生成單位元組應用程式,請不進行任何定義(預設)。
預設情況下,為 mfc 應用程式定義的是 _mbcs。
在 tchar.h 中根據條件定義 _tchar 資料型別。
如果為您的生成定義了 _unicode 符號,則 _tchar 被定義為 wchar_t;否則,對於單位元組和 mbcs 生成,它被定義為 char。
(wchar_t 是基本的 unicode 寬字元資料型別,它是 8 位有符號 char 的 16 位對等項。)對於國際應用程式,使用以 _tchar(而非位元組)為單位進行運算的 _tcs 函式族。
例如,_tcsncpy複製 n 個 _tchars,而不是 n 個位元組。
由於某些單位元組字符集 (sbcs) 字串處理函式採用(有符號的)char* 引數,因此定義 _mbcs 時,編譯器會發出型別不匹配的警告。
可通過三種方法來避免此警告:
在 tchar.h 中使用型別安全的內聯函式 thunk。
這是預設行為。
通過在命令列上定義 _mb_map_direct,在 tchar.h 中使用直接巨集。
如果這樣做,必須手動匹配型別。
這是最快的方法,但不是型別安全的方法。
在 tchar.h 中使用型別安全靜態鏈結庫函式 thunk。
為此,請在命令列上定義 _no_inlining 常量。
這是最慢的方法,但卻是型別安全性最高的方法。
一般文字對映的預處理器指令
# define
編譯版本
示例 _unicode
unicode(寬字元)
_tcsrev對映到 _wcsrev
_mbcs
多位元組字元
_tcsrev對映到_mbsrev
無(預設值既未定義 _unicode 也未定義 _mbcs)
sbcs (ascii)
_tcsrev對映到 strrev
例如,如果在程式中定義了 _mbcs,則 tchar.h 中定義的一般文字函式_tcsrev對映到_mbsrev。或者,如果定義了 _unicode,則對映到 _wcsrev。
否則,_tcsrev對映到 strrev。
在 tchar.h 中還提供了其他資料型別對映以方便程式設計,但 _tchar 是最有用的。
一般文字資料型別對映
一般文字
資料型別名稱
_unicode 和
_mbcs 未定義
_mbcs
已定義
_unicode
已定義
_tchar
char
char
wchar_t
_tint
intunsigned int
wint_t
_tschar
signed char
signed char
wchar_t
_tuchar
unsigned char
unsigned char
wchar_t
_txchar
char
unsigned char
wchar_t
_t 或_text
無效(由預處理器移除)
無效(由預處理器移除)
l (將後面的字元或字串轉換成相應的 unicode 形式)
有關例程、變數和其他物件的一般文字對映的列表,請參見「執行庫參考」中的一般文字對映。
說明
unicode 字串有可能包含嵌入 null 位元組,所以不要在 unicode 字串中使用 str 函式族。
同樣,不要在 mbcs(或 sbcs)字串中使用 wcs 函式族。
下列**片段闡釋了用於對映到 mbcs、unicode 和 sbcs 模型的 _tchar 和_tcsrev的用法。
_tchar *retval, *szstring;如果已定義 _mbcs,則預處理器將此片段對映到以下**:retval = _tcsrev(szstring);
char *retval, *szstring;如果已定義 _unicode,則預處理器將此片段對映到以下**:retval = _mbsrev(szstring);
wchar_t *retval, *szstring;如果既未定義 _mbcs 也未定義 _unicode,則預處理器將此片段對映到單位元組 ascii **,如下所示:retval = _wcsrev(szstring);
char *retval, *szstring;因此,您可以編寫、維護和編譯與三種字符集中任何一種的特定例程一起執行的單個源**檔案。retval = strrev(szstring);
請參見
概念visual c++ 中的文字和字串
將 tchar.h 資料型別用於 _mbcs **
MySQL中INSERT的一般用法
insert語句是最常見的sql語句之一,但是mysql中insert語句的用法和標準用法不盡相同,下文就為您詳細介紹mysql中insert的一般用法,供您參考。mysql中insert的一般用法 mysql中的insert語句和標準的insert不太一樣,在標準的sql語句中,一次插入一條記錄的...
c 中的向量一般操作
vector的刪除操作 1.可以使用四種方式刪除vector中的元素 第一種是使用向量容器vector的成員函式erase 使用這種方式並不能清除刪除元素所佔的記憶體空間 由於向量容器vector中的元素在記憶體中都是按順序排放的,所以刪除某個元素後,會導致迭代器失效,因為刪除了乙個元素會使其他元素...
MySQL 中 INSERT 的一般用法
在標準的sql語句中,一次插入一條記錄的insert語句只有一種形式。insert into tablename 列名 values 列值 而在mysql中還有另外一種形式。insert into tablename set column name1 value1,column name2 valu...