本片文章轉載自:http://www.cnblogs.com/sobe/archive/2011/03/14/1984188.html
百度或谷歌一下,有很多大牛早已經寫過無數相關的文章說明這幾個宏的作用
而我嘛,寫這篇東東當是給自己一個提醒,因為之前直接使用了L這個標志,搞到後來要自己手動轉編碼
MSDN中對於L的說明有一大堆英文,不過主要的就是:L是用來標志一個字符(串)為寬字符(串)
寬字符和多字節字符的說明如下:(引用自網絡)
寬字符,wide character,該字符集內每個字符使用相同的位長;
多字節字符,multibyte character,每個字符可以是一到多個字節不等,而某個字節序列的字符值由字符串或流(stream)所在的環境背景決定。
當你在VS2005以上版本的IDE工作時,可以選擇工作於這兩種不同的編碼方式下,而在Unicode方式下,則要對字符(串)常量前添加L來告訴編譯器它是寬字符
而MS為我們定義了好幾個相關的宏,下面來一一說明:
_T //定義於tchar.h
_TEXT //同樣定義於tchar.h,具體如下:
#define _T(x) __T(x)
TEXT //定義於winnt.h
#define TEXT(quote) __TEXT(quote)
當我看到這裡的時候,一下子頭暈了,不知道大家有沒有注意到下面兩個問題:
1.這三個宏分別在兩個不同的文件被定義,看上去一個是運行時的頭文件,一個是Win的頭文件
2.前面兩個根據_UNICODE來確定宏內容,另一個則是根據UNICODE
那如果要同時使用這三個宏的話,那不是要同時定義_UNICODE和UNICODE?帶著問題,我把項目的屬性修改一下
當設置為Unicode編碼的時候,編譯器命令選項中的確同時加入了_UNICODE和UNICODE
看來這應該又是MS的歷史遺留問題拉,搜索一下才發現:(引自網絡)
Jeffrey Richter在《Windows核心編程》中說,_UNICODE宏用於C運行期頭文件,而UNICODE宏則用於Windows頭文件.當編譯源代碼模塊時,通常必須同時定義這兩個宏.
嘻嘻,無意發現的~~~~扯遠拉~~~~
看IDE自動生成的代碼,大都使用TEXT這個,應該是因為IDE生成的都是基於Win的代碼,使用這個也很正常吧
從上面的分析可得:
這幾個宏的效果都是一個的,還是建議大家有事沒事都加上其中一個(_T、_TEXT、TEXT)
而L嘛,個人認為還是不要在代碼中直接使用
好拉,就這麼多,歡迎各位大牛來圍觀指正~~~