最早是使用VC++工具來學習C++,學的越多就越對VC擋住的我看不見的東西好奇,總想多接觸一些開發環境,今日抽空摸索了一下CodeBlocks這個開源的IDE使用方法,配置的編譯器是MinGW的gcc編譯器,gcc編譯多字節集的字符還沒什么問題,但遇到寬字符,發現編譯不通過,經過多方查找,發現gcc對寬字符的支持分規則同我用熟了的cl編譯器有一些區別,具體用法如下:
GNU C/C++編譯器gcc也可以正確支持wchar_t字符和字符串,但是源代碼的保存格式必須符合下面條件:
一:源代碼文件的保存編碼必須是UTF-8;
二:UTF-8編碼格式的源代碼文件,不能有BOM標志頭.
只有源代碼文件符合上面兩個條件,gcc才會正確支持wchar_t字符和字符串.如果不符合上面兩個條件的話,有可能會編譯出錯,有可能會產生錯誤的wchar_t字符和字符串.
gcc在Windows平台下,wchar_t是16位類型,在Linux平台下,wchar_t是32位類型.
另外,GCC提供了以下的參數開關來支持其它文字編碼的源文件:
a)-finput-charset=charset
gcc在默認情況下,總是假設源代碼的編碼是UTF-8,如果是其它編碼的源代碼文件,源代碼里面又用到了wchar_t的類型,則可以使用-finput-charset=charset這個參數來實現.例如通常使用GBK編碼的源代碼可以假如參數:-finput-charset=GBK
b)-fwide-exec-charset=charset
默認情況下,gcc在Windows平台下,寬字符串串常量的每個字符是16位UTF-16類型,在Linux平台下,寬字符串串常量的每個字符是32位UTF-32類型, 使用這個參數,可以改變寬字符串串常量的類型.例如在x86的機器環境,Linux操作系統下,要使例如 L"漢字" 編譯后保存為UTF-16的字符串,則可以使用 -fwide-exec-charset=UTF-16LE
備注:我后來的解決方法過程,是直接用記事本重新打開另存為UTF-8格式,編譯通過,不過這樣感覺好麻煩,我還得再試試其它方法,最后不理會源代碼文件保存格式,只是在編譯選項那里設置-finput-charset=GBK,這樣也是可以的(Windows上的字符編碼貌似總是GBK的).
1 TCHAR szMsgText[ ] = TEXT("大家好!"); 2 TCHAR szMsgTitle[ ] = TEXT("提示!");
http://www.cnblogs.com/guobbs/p/3654317.html