東芝中國的C++筆試

才智咖 人氣:1.95W

1. 將程式改成Unicode程式設計需要做哪些修改?

東芝中國的C++筆試

    window 2k以後的系統底層都是基於Unicode的,就算你呼叫ANSI的API(以A結尾比如SetWidowsTextA),系統也會在你的程序預設堆上動態分配一塊記憶體,存放轉換後的Unicode字串,然後把轉換後的字串傳遞給API,如果呼叫了返回值為ANSI字串的'API,Windows會在後臺進行相反的轉換。

    其實VC中進行Unicode程式設計也不麻煩,大概如下:

1.為工程新增UNICODE和_UNICODE預處理選項,在中就是 專案 -> 屬性 -> c/c++ -> 前處理器 在"預處理定義"中加入這兩個巨集定義(vc6中 project -> settings -> c/c++ -> general 中的 Preprocessor definitions).

ude <TCHAR.h>(一般在stdafx.h中)然後把所有使用char*定義變數的地方換為LPTSTR/TCHAR*或LPCTSTR/const TCHAR*(對應於const char*).

3.把所有的字串常量用_T()巨集包起來,比如 TCHAR* szText = _T("我的Text");

4.所有的C庫字串操作函式也做相應的替換,比如

strlen ->_tcslen

strcat ->_tcscat

strcmp ->_tcscmp

......

    注意,這些函式中的"文字長度"均為字元個數,而非char個數具體參看MSDN.

呼叫一般不用做特殊處理,當定義了UNICODE和_UNICODE後,所有的API都會被巨集指向W結尾的版本(不定義則指向A結尾的版本).

    其實,上面所說的並非強制你使用UNICODE,如果你還想回去使用ANSI,沒有問題,把第一步定義的兩個巨集拿掉就OK了,繼續我們的ANSI程式設計。

 

2. TCHAR同char的區別

TCHAR 就是當你的字元設定為什麼就是什麼

例如:程式編譯為 ANSI, TCHAR 就是相當於 CHAR

當程式編譯為 UNICODE, TCHAR 就相當於 WCHAR ,每個字元佔兩個位元組

3. BOOL同bool的區別

意義上沒什麼區別,但卻是兩種型別. 

bool應該是C語言裡定義的,返回值為true和false(事實上就上1和0) 

而BOOL應該是MFC及SDK裡定義返回值的. 

它的定義應該是:typedef  int  BOOL;(WINDEF.H中定義) 

也就是說它是int型的 

返回值是大寫的TRUE  和FALSE 

定義如下: 

#define  FALSE      0 

#define  TRUE        1 

(AFX.H中如此定義) 

一個是布林型,一個是整型. 

事實上整型如果取1和0就可以代替布林型了.

TAGS:筆試 東芝